queue队列消费者生产者测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | from multiprocessing import JoinableQueue from threading import Thread def worker(q): while True : try : item = q.get() print (item) if item % 5 = = 0 : if item = = 5 : time.sleep( 20 ) q.put( 111 ) q.task_done() except Exception as e: print (e) q = JoinableQueue() import time def customer(q): for i in range ( 100 ): try : q.put(i) except Exception as e: print (e) ct = Thread(target = customer, name = 'customer' , args = (q,)) ct.daemon = True ct.start() ct.join() for i in range ( 4 ): t = Thread(target = worker, name = 'worker' + str (i), args = (q,)) t.daemon = True t.start() q.join() print ( 'end' ) |
一旦消费者速度快,生产者速度慢,可能导致提前结束
所以添加任务不能起一个线程,一直加,一旦速度慢下来,就提前结束了。
保险的是在worker中 task_done之前添加。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步