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进程是死循环,无法等待其结束,只能强行终止

  数据输出效果:

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM