Queue() question. This post is pretty long.
grocery_stocker
cdalten at gmail.com
Thu Apr 16 13:02:54 EDT 2009
I don't get how item = self.__queue.get() gets advanced to
if item is None:
in the following code.
>>> import time
>>> from threading import Thread
>>> import Queue
>>>
>>> WORKER = 2
>>>
>>> class Worker(Thread):
... def __init__(self, queue):
... Thread.__init__(self)
... self.__queue = queue
... def run(self):
... while 1:
... item = self.__queue.get()
... if item is None:
... break
... print "task", item, "finished"
...
>>> for i in range(WORKER):
... Worker(queue).start()
...
>>> for i in range(10):
... queue.put(i)
...
>>> task 0 finished
task 1 finished
task 2 finished
task 3 finished
task 4 finished
task 5 finished
task 6 finished
task 7 finished
task 8 finished
task 9 finished
>>> for i in range(WORKER):
... queue.put(None)
...
This because when I do something like
[cdalten at localhost ~]$ python
Python 2.4.3 (#1, Oct 1 2006, 18:00:19)
[GCC 4.1.1 20060928 (Red Hat 4.1.1-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import Queue
>>> queue = Queue.Queue()
>>>
>>> while 1:
... item = queue.get()
... if item == 'done':
... break
...
this
is
a
test
done
[3]+ Stopped python
[cdalten at localhost ~]$ kill %3
It appears that only item = queue.get() called. Ie, the block never
advances to if item == 'done':
like in the first example
More information about the Python-list
mailing list