python进程间通信

1 python提供了多种进程通信的方式,主要Queue和Pipe这两种方式,Queue用于多个进程间实现通信,Pipe是两个进程的通信

1.1 Queue有两个方法:

  • Put方法:以插入数据到队列中,他还有两个可选参数:blocked和timeout。详情自行百度

  • Get方法:从队列读取并且删除一个元素。同样,他还有两个可选参数:blocked和timeout。详情自行百度

1#!coding:utf-8 2from multiprocessing import Process, Queue 3import os,time,random 4 5#写数据进程执行的代码 6def proc_write(q,urls): 7 print 'Process is write....' 8 for url in urls: 9 q.put(url) 10 print 'put %s to queue... ' %url 11 time.sleep(random.random()) 12 13#读数据进程的代码 14def proc_read(q): 15 print('Process is reading...') 16 while True: 17 url = q.get(True) 18 print('Get %s from queue' %url) 19 20if __name__ == '__main__': 21 #父进程创建Queue,并传给各个子进程 22 q = Queue() 23 proc_write1 = Process(target=proc_write,args=(q,['url_1','url_2','url_3'])) 24 proc_write2 = Process(target=proc_write,args=(q,['url_4','url_5','url_6'])) 25 proc_reader = Process(target=proc_read,args=(q,)) 26 #启动子进程,写入 27 proc_write1.start() 28 proc_write2.start() 29 30 proc_reader.start() 31 #等待proc_write1结束 32 proc_write1.join() 33 proc_write2.join() 34 #proc_raader进程是死循环,强制结束 35 proc_reader.terminate()
  • 运行截图:

1.2 Pipe通信机制,

* Pipe常用于两个进程,两个进程分别位于管道的两端

* Pipe方法返回(conn1,conn2)代表一个管道的两个端,Pipe方法有duplex参数,默认为True,即全双工模式,若为FALSE,conn1只负责接收信息,conn2负责发送,

* send和recv方法分别为发送和接收信息。

1#!coding:utf-8 2import multiprocessing 3import os,time,random 4 5#写数据进程执行的代码 6def proc_send(pipe,urls): 7 #print 'Process is write....' 8 for url in urls: 9 10 print 'Process is send :%s' %url 11 pipe.send(url) 12 time.sleep(random.random()) 13 14#读数据进程的代码 15def proc_recv(pipe): 16 while True: 17 print('Process rev:%s' %pipe.recv()) 18 time.sleep(random.random()) 19 20if __name__ == '__main__': 21 #父进程创建pipe,并传给各个子进程 22 pipe = multiprocessing.Pipe() 23 p1 = multiprocessing.Process(target=proc_send,args=(pipe[0],['url_'+str(i) for i in range(10) ])) 24 p2 = multiprocessing.Process(target=proc_recv,args=(pipe[1],)) 25 #启动子进程,写入 26 p1.start() 27 p2.start() 28 29 p1.join() 30 p2.terminate()
  • 运行结果;

本文转自 https://www.cnblogs.com/guguobao/p/9398653.html,如有侵权,请联系删除。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )