结合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())