结合Pool进程池进程,实现进程之间的通讯,稍微复杂的运用

#进程池中的Queue
"""
如果要用Pool创建进程,就需要multiprocessing.Manager()中的Queue()
而不是multiprocessing.Queue()
"""
from multiprocessing import Manager,Pool
import os

def write(q):
    print('writer启动')
    for ch in "dongge":
        q.put(ch)
    # print(q.get())

def read(q):
    print('reader启动')
    for i in range(q.qsize()):
        print('reader从Queue获取消息:%s'%q.get())

if __name__ == "__main__":
    print("main Process(%s) start"%os.getpid())
    #新建一个消息队列 里面可以防止无限条消息
    q = Manager().Queue()#使用Manager中的Queue来初始化
    #新建一个进程池 无限数量的进程
    po = Pool()
    po.apply(write,(q,))#先完成这个在往下进行
    print(q.qsize())
    #异步读取 只要里面没有东西就结束 有时输出不出来
    #往往在主进程结束之后再启动
    #如果是同步读取则主进程一定会在读取所有消息之后再结束
    po.apply_async(read,(q,))

    po.close()
    print("main Process(%s) end"%os.getpid())

  

原文地址:https://www.cnblogs.com/zhangboblogs/p/8623691.html