Op 2005-12-21, ddh schreef <[EMAIL PROTECTED]>: > Hi, > I got a problem. I use a 'select' in a loop in the main thread, and > when select return, a new thread will be created to handle the network > event. And if the client send some special string, the thread will > change a global flag to false, so the loop in the main thread will > break. But it never work. > > Below is the code: > --------------------- s.py (the server) -------------------------- > import socket > import select > import thread > import sys > > go_on = True > > def read_send(s): > s.setblocking(1) > str = s.recv(1024) > print 'recv:', str > s.send(str) > s.close() > if (str == 'quit'): > go_on = False > print 'User quit...with go_on =', go_on > return > > [ ... ]
It has nothing to do with threads. If you assign to a name in a function, that name will be treated as a local variable. So the go_on = False in read_send will not affect the global go_on. If you want to rebind global names in a function you have to use the global statement. So your function would start: def read_send(s): global go_on s.setblocking(1) ... -- Antoon Pardon -- http://mail.python.org/mailman/listinfo/python-list