zoukankan      html  css  js  c++  java
  • 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进程是死循环,无法等待其结束,只能强行终止
    

      数据输出效果:

  • 相关阅读:
    函数part1 初始函数
    文件操作 文件修改的两种方式
    文件操作part3 文件内指针的移动
    文件操作part2
    day08作业
    文件操作part1
    字符编码
    ORA-15124 数据库启动阶段报错
    将数据库从普通文件系统迁移到ASM中
    在ASM中移动数据文件
  • 原文地址:https://www.cnblogs.com/mahailuo/p/8471254.html
Copyright © 2011-2022 走看看