Python使用threading和queue实现多线程时如何在queue队列所有任务已经完成时退出程序?
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()
比如python官网上的这段例子
回复 1# SeriousCool
文档的例子主要是解释Queue的用法,而线程部分,为了简单则是无限循环。
如果要控制线程退出,还要修改代码,起码应该有个标志位控制,在此基础上更接近现实的用法:import queue
import sys
import threading
def worker(name, q, exit_flag):
while not exit_flag.is_set():
try:
# 超时控制,便于及时响应exit_flag
item = q.get(timeout=3)
except queue.Empty:
continue
print('thread {}, item {}'.format(name, item), file=sys.stderr)
q.task_done()
def main():
# 线程退出标志位
exit_flag = threading.Event()
exit_flag.clear()
# 创建共享队列和线程池
q = queue.Queue()
num_of_threads = 5
threads = [threading.Thread(target=worker, args=(str(i+1), q, exit_flag))
for i in range(num_of_threads)]
for t in threads:
t.start()
for i in range(50):
q.put(i)
q.join()
# 任务处理完成,通知线程退出,并join等待
exit_flag.set()
for t in threads:
t.join()
if __name__ == '__main__':
main() timespace 发表于 2014-03-18 13:29 static/image/common/back.gif
回复 1# SeriousCool
文档的例子主要是解释Queue的用法,而线程部分,为了简单则是无限循环。
如果要控制 ...
非常感谢~晚点测试下
页:
[1]