When I set daemon false, it stays in the loop, not quit any more.
what's the role does the daemon state plays?
code:
----------------------------------------------------------------------------------------
import Queue
import threading
def do_some_thing(x):
print int(x)
class MyThread(threading.Thread):
def __init__(self, queue):
threading.Thread.__init__(self)
self.queue = queue
def run(self):
while True:
params = self.queue.get()
do_some_thing(params)
self.queue.task_done()
q = Queue.Queue()
for i in range(1, 5):
t = MyThread(q)
t.setDaemon(True)
t.start()
for x in range(10):
q.put(x)
q.join()
Take a look at the documentation for the threading module here:
http://docs.python.org/release/2.6/library/threading.html, and the
discussion on daemon vs non-daemon threads here:
http://blog.doughellmann.com/2008/01/pymotw-threading_13.html
Basically, as long as at least one non-daemon thread is still running,
your program will not exit.
> <snip code>
--
regards,
kushal
And I should have read your mail better. Take a look at the
documentation of the task_done method:
http://docs.python.org/library/queue.html
--
regards,
kushal
before i wrote the email, i've already read the python docs carefully.
i need the proof from code, i mean python source code. i tried to
prove some of my assumptions that lead the loop quit, and i traced
back to Queue.py, threading.py, dummy_thread.py, now i need some hints
to help me understanding the sample from python source code.
You would need to look into the source code of
python's builtin 'thread' module which is the low-level
threading implementation used by python's 'threading'
module (which is a wrapper atop this).
'threading' aside from everything else it does, really in the
end calls thread.start_new_thread(...)
cheers
James
Here's a slightly different example that demonstrates more clearly how
to end each thread.