python 进程池Pool以及Queue的用法
import os,time,random from multiprocessing import Pool def task(name): print('正在运行的任务:%s,PID:(%s)'%(name,os.getpid())) start=time.time() time.sleep(random.random()*10) end=time.time() print('任务:%s,用时:%0.2f 秒'%(name,(end-start))) if __name__=='__main__': print('父进程ID:%s'%(os.getpid())) p=Pool(4) for i in range(5): p.apply_async(task,args=(i,)) print('等待所有添加的进程运行完毕。。。') p.close()#在join之前要先关闭进程池,避免添加新的进程 p.join() print('End!!,PID:%s'% os.getpid())
进程间的通信
from multiprocessing import Process,Queue import os,time,random #写数据的进程 def write(q): print('写进程PID:%s'% os.getpid()) for value in ['I','Love','Python']: print('放入队列:%s,时间:%s'% (value,time.time())) q.put(value) time.sleep(random.random()) #读数据的进程: def read(q): print('读进程PID:%s'% (os.getpid())) while True: value=q.get(True) print('获得数据:%s,时间:%s'% (value,time.time())) if __name__=='__main__': #父进程创建Queue,并传给各个子进程 q=Queue() pw=Process(target=write,args=(q,)) pr=Process(target=read,args=(q,)) pw.start() pr.start() pw.join() pr.terminate()#pr进程是死循环,无法等待其结束,只能强行终止
数据输出效果:
每天扫一扫,到店付款省钱!
动动小手支持一下作者,谢谢🙏