import os
import time
import random
from multiprocessing import Manager
from multiprocessing import Pool
#写入数据
def write(q):
for value in ['a','b','C','D']:
q.put(value)
print("写入数据%s"%value)
time.sleep(random.random())
#读数据
def read(q):
for i in range(q.qsize()):#q.qsize()当前对列的长度
value=q.get(True)
print("父进程%s,子进程%s", (os.getpid(), os.getppid()))
print("get values is %s"%value)
time.sleep(random.random())
if __name__=="__main__":
q = Manager().Queue() # 使用manager中的queue来初始化,可以进行进程池通信
Po= Pool() #创建进程池
Po.apply(write,(q,)) #任务申请加入进程池中
Po.apply(read,(q,))
Po.close()
Po.join()
print("写入并且读完")
pool.close() 关闭进程池,不能再次申请添加(apply)新任务
pool.join()限制当住进程任务结束后,立马结束程序,如果没有join,会导致进程池中的任务不执行
pool.apply_async(实例,参数),申请进程池,创建子进程执行任务,(非堵塞执行,也就是同时执行所有任务,)
pool.apply(实例,参数),申请进程池,创建子进程执行任务,(堵塞执行,挨个执行,也就是一个一个执行,等第一个进程执行完后,第二个进程再执行,比如例子上的读写,等写完了再读)