python进程间通信

Bill78 等级 1081 0 0

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

1.1 Queue有两个方法:

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

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

#!coding:utf-8
from multiprocessing import Process, Queue
import os,time,random

#写数据进程执行的代码
def proc_write(q,urls):
    print 'Process is write....'
    for url in urls:
        q.put(url)
        print 'put %s to queue... ' %url
        time.sleep(random.random())

#读数据进程的代码
def proc_read(q):
    print('Process is reading...')
    while True:
        url = q.get(True)
        print('Get %s from queue' %url)

if __name__ == '__main__':
    #父进程创建Queue,并传给各个子进程
    q = Queue()
    proc_write1 = Process(target=proc_write,args=(q,['url_1','url_2','url_3']))
    proc_write2 = Process(target=proc_write,args=(q,['url_4','url_5','url_6']))
    proc_reader = Process(target=proc_read,args=(q,))
    #启动子进程,写入
    proc_write1.start()
    proc_write2.start()

    proc_reader.start()
    #等待proc_write1结束
    proc_write1.join()
    proc_write2.join()
    #proc_raader进程是死循环,强制结束
    proc_reader.terminate() 
  • 运行截图:
    python进程间通信

1.2 Pipe通信机制,

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

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

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

#!coding:utf-8
import multiprocessing
import os,time,random

#写数据进程执行的代码
def proc_send(pipe,urls):
    #print 'Process is write....'
    for url in urls:

        print 'Process is send :%s' %url
        pipe.send(url)
        time.sleep(random.random())

#读数据进程的代码
def proc_recv(pipe):
    while True:
        print('Process rev:%s' %pipe.recv())
        time.sleep(random.random())

if __name__ == '__main__':
    #父进程创建pipe,并传给各个子进程
    pipe = multiprocessing.Pipe()
    p1 = multiprocessing.Process(target=proc_send,args=(pipe[0],['url_'+str(i) for i in range(10) ]))
    p2 = multiprocessing.Process(target=proc_recv,args=(pipe[1],))
    #启动子进程,写入
    p1.start()
    p2.start()

    p1.join()
    p2.terminate() 
  • 运行结果;
    python进程间通信

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

收藏
评论区

相关推荐

python进程间通信
1 python提供了多种进程通信的方式,主要Queue和Pipe这两种方式,Queue用于多个进程间实现通信,Pipe是两个进程的通信 1.1 Queue有两个方法: Put方法:以插入数据到队列中,他还有两
2020我们来了
**我们有一个梦想** ,要录制一套通俗易懂的运维及运维开发视频,要求通俗易懂,需要花费精力和时间,邀请有余力的小伙伴积极参与。后续会录制php和Python开发视频。 **我们有一个梦想** ,让技术不在难学,让资源不再难找。在这个版块,你可以发布自己收藏的技术资料,也可以发布你想要的技术资料。搜索全站,发现没有你想要的,请在此处留言。
IT运维面试问题总结
公众号关注 “ **杰哥的IT之旅** ”, 选择“ **星标** ”, 重磅干货,第一 时间送达! ![](https://oscimg.oschina.net/oscnet/06940398-3404-44af-901e-768d805cfd9b.png) **Ansible** ### 1、简述Ansible及其优势? Ansible
Day01——Python简介
**一、Python简介** python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的**脚本解释程序**,作为ABC语言的一种继承,Python通过C语言开发。 TIOBE开发语言排名(2018-01-17),**python排名第四** https:/
JavaScript 中的 10 个机器学习示例
![](https://oscimg.oschina.net/oscnet/dcf1389f-b1d2-4d53-9423-9d66180707d3.png) 随着时间的推移,机器学习库变得更快也更易于使用,其发展速度丝毫没有放缓的迹象。虽然一直以来 Python 都是机器学习的重要语言,但目前的神经网络可以在任何语言中运行,包括 JavaScript
Python 多进程程批量爬取小
使用python多进程跑同样的代码。 python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程。Python提供了非常好用的多进程包multiprocessing,只需要定义一个函数,Python会完成其他所有事情。借助这个包,可以轻松完成从单进程到**并发执行**的转换。multiproc
Python 学习之路(四)
Python 学习之路(四) ============== > 以下所用的是Python 3.6 一、时间模块(time 模块) --------------- > 实例环境为Ubuntu 14.04 python 3.6 导入time模块。注:可以在命令行输入: help(time.方法名字)查看帮助文档,例:help(time.localtime)
Python 常见优化技巧,让你的程序溜溜的跑起来!
点击蓝色“Python空间”关注我丫 加个“星标”,每天一起快乐的学习 ![](https://oscimg.oschina.net/oscnet/fc8a9052a7f4c0d30122fa3e1caceeb5a7a.jpg) 来源:https://www.ibm.com/developerworks/cn/linux/l-cn-python
Python实现多进程
Python可以实现多线程,但是因为Global Interpreter Lock (GIL),Python的多线程只能使用一个CPU内核,即一个时间只有一个线程在运行,多线程只是不同线程之间的切换,对多核CPU来说,就是巨大的浪费。如4核CPU,实际上只利用了一个核,CPU利用率只有25%。要充分利用多核CPU,可以实现Python的多进程。 首先,im
Python很慢?Python之父一句话亮了
### Python实战社群Java实战社群长按识别下方二维码,按需求添加扫码关注添加客服进Python社群▲扫码关注添加客服进Java社群▲ 译者丨诗书塞外 原文丨http://dwz.date/duAA Python的运行速度确实没有C或者Java快,但是有一些项目正在努力让Python变得更快。
Python日期时间
python时间:             1.返回当前日期时间戳:time.time()             2.格式化时间戳为本地时间:time.localtime(time.time()) time.struct\_time(tm\_year=2015, tm\_mon=4, tm\_mday=3, tm\_hour=14, tm\_min
Python时间模块,超实用总结!
今天是Python时间模块核心使用逻辑。本篇思维导图如下: [![](https://s4.51cto.com/oss/202008/31/3123f823b2a10a57551a876b214e4aa8.jpg-wh_651x-s_1017478344.jpg)](https://www.oschina.net/action/GoToLink?url=h
Python源码在Win下和Linux下的编译,C++调用Python库绘制等高线
### 目录 前言 Python源码以及VS2017的准备 Python源码 VS2017 Windows下编译Python源码 编译命令 编译步骤 编译后的配置 添加注册表 Win10中编译Python源码小结 Windows中C++调用Python代码绘制等高线图 CMakeLists.txt文件如下: Python代码如下: CPP文件:
Python调用API接口的几种方式
Python调用API接口的几种方式 相信做过自动化运维的同学都用过API接口来完成某些动作。API是一套成熟系统所必需的接口,可以被其他系统或脚本来调用,这也是自动化运维的必修课。 本文主要介绍python中调用API的几种方式,下面是python中会用到的库。 \- urllib2 \- httplib2 \- pycurl \- reque
Python项目的虚拟环境
在开发 Python 项目时,首先要确定使用的 Python 版本,目前默认是 3.7(Python 2.7 已经在 2020 年停止支持了,但是需要维护的项目中肯定有不少基于 Python 2.x 版本的),其次会根据项目的需求来选择特定版本的第三方库(一般都会选择最新版本的,除非不同库之间有冲突)。但是使用 `pip` 安装第三方库时默认都会安装到 Py