#进程池中的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())