# 进程间通信
# Queue
如果要使用 Pool 创建进程,就需要使用 multiprocessing.Manager() 中的 Queue(),而不是multiprocessing.Queue()。
# -*- coding:utf-8 -*-
import os,time,random
from multiprocessing import Manager,Pool
def reader(q):
print("reader启动(%s),父进程为(%s)" % (os.getpid(), os.getppid()))
for i in range(q.qsize()):
print("reader从Queue获取到消息:%s" % q.get(True))
def writer(q):
print("writer启动(%s),父进程为(%s)" % (os.getpid(), os.getppid()))
for i in "ithui":
q.put(i)
def main():
print("(%s) start" % os.getpid())
q = Manager().Queue() # 使用Manager中的Queue
po = Pool()
po.apply_async(writer, (q,))
time.sleep(1) # 先让上面的任务向Queue存入数据,然后再让下面的任务开始从中取数据
po.apply_async(reader, (q,))
po.close()
po.join()
print("(%s) End" % os.getpid())
if __name__=="__main__":
main()
# Pipe