nac*_*bre 15 python queue multithreading
我是python的新手(我来自PHP),我一直在阅读教程和尝试几天,但我无法理解这个队列示例(http://docs.python.org/2/library /que.html)
def worker():
while True:
item = q.get()
do_work(item)
q.task_done()
q = Queue()
for i in range(num_worker_threads):
t = Thread(target=worker)
t.daemon = True
t.start()
for item in source():
q.put(item)
q.join() # block until all tasks are done
Run Code Online (Sandbox Code Playgroud)
我不明白的是工作线程是如何完成和存在的.我已经读过q.get()块,直到一个项可用,所以如果所有项都被处理并且没有留在队列中,为什么q.get()不会永远阻塞?
线程在此代码中不会正常退出(当队列为空时它们确实被阻止).程序不会等待它们,因为它们是守护程序线程.
该程序不会立即退出,并且不会因为q.join和q.task_done调用而永久阻止.
每当项目添加到队列时,未完成任务的计数就会增加.每当消费者线程调用task_done()以指示该项目已被检索并且其上的所有工作都已完成时,计数就会下降.当未完成任务的数量降至零时,join()取消阻塞,并且程序存在而不等待守护程序线程.
| 归档时间: |
|
| 查看次数: |
21701 次 |
| 最近记录: |