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

      数据输出效果:

  • 相关阅读:
    ASP.NET Core 3.0 WebApi中使用Swagger生成API文档简介
    $.ajax
    C#使用RabbitMQ
    WebAPI+NLog实现接口调用日志输出
    Spire.Doc组件读取与写入Word
    .net中RabbitMQ生产者/消费者
    第2课
    第1课
    详解usbmon抓取的log各字段的含义
    使用 usbmon 抓取 usb 总线上的数据
  • 原文地址:https://www.cnblogs.com/mahailuo/p/8471254.html
Copyright © 2011-2022 走看看