# 进程间通信

# 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