Python中的线程队列和进程队列

Python中的线程队列和进程队列 文章目录线程队列进程队列小结线程队列queue模块是Python多线程编程中进行线程间安全通信与任务调度的核心工具。下面代码是官方示例稍作更改得到的。importthreadingimportqueuedefworker(q):whileTrue:itemq.get()print(fWorking on{item})print(fFinished{item})q.task_done()qqueue.Queue()threading.Thread(targetworker,args[q],daemonTrue).start()foriteminrange(30):q.put(item)q.join()print(All work completed)在这段代码中主线程定义了一个队列q并将其作为worker中的成员传递到子线程中。从代码可见主线程和子线程使用了一组彼此对偶的方法【q.get()】和【q.put()】简单来说就是主线程通过put向队列中塞入一个信息子线程通过get将其获取。【task_done】的作用是告诉队列当前的任务已经处理完成。进程队列需要注意queue是转为Thread设计的线程队列并不能用在进程通信中。若想在进程中使用则需将其替换为multiprocessing自己实现的队列示例如下importmultiprocessingasmpdefworker(q):whileTrue:itemq.get()ifitemisNone:breakprint(fWorking on{item})print(fFinished{item})if__name____main__:qmp.Queue()pmp.Process(targetworker,args[q],daemonTrue)p.start()foriteminrange(30):q.put(item)q.put(None)p.join()print(All work completed)和线程队列相比multipricessing并没有task_done也不支持阻塞。所以在上述测试代码中当跑完循环后手动发送了一个None作为结束标志从而让worker跳出死循环以终结进程。而为了阻止主进程提前退出直接用到了Process的join方法。小结本文介绍了Python中线程队列和进程队列的使用方法。线程队列使用queue模块通过put()和get()实现线程间通信task_done()标记任务完成。进程队列需使用multiprocessing.Queue但不支持task_done()和阻塞需手动发送结束标志如None来终止进程。线程队列示例展示了主线程和子线程通过队列传递任务而进程队列示例通过发送None信号来安全终止子进程。两种队列在多线程/进程编程中都是实现任务调度的重要工具。