本文来源于python 3.5版本的官方文档

multiprocessing模块为进程间通信提供了两种方法:

1.进程队列queue

The Queue class is a near clone of queue.Queue。
Queues are thread and process safe。

使用进程队列,可以在两个进程间传递消息。其用法跟queue.Queue类似。

使用方法:

from multiprocessing import Process,Queue
def func(q):q.put([42,None,"hello"])    #把一个列表放入一个队列中if __name__=="__main__":q1=Queue()        #定义一个队列p1=Process(target=func,args=(q1,))      #实例化一个进程p1.start()  #启动进程 print(q1.get())     #从队列中取出一个项目,并打印 p1.join()   #阻塞进程

返回值:

[42, None, 'hello']

在进程间通信可以使用python中所有的数据类型,但这种方式并不是真正意义上的进程间的通信。

2.管道pipe

The Pipe() function returns a pair of connection objects connected by a pipe which by default is duplex (two-way).
The two connection objects returned by Pipe() represent the two ends of the pipe. Each connection object has send() and recv() methods (among others).
Note that data in a pipe may become corrupted if two processes (or threads) try to read from or write to the same end of the pipe at the same time.
Of course there is no risk of corruption from processes using different ends of the pipe at the same time.

pipe()返回两个连接对象代表pipe的两端。每个连接对象都有send()方法和recv()方法。

但是如果两个进程或线程对象同时读取或写入管道两端的数据时,管道中的数据有可能会损坏。

当进程使用的是管道两端的不同的数据则不会有数据损坏的风险。

使用方法:

from multiprocessing import Process,Pipedef func(conn):conn.send([42,None,"hello"])    #连接发出信息conn.close()        #关闭连接 if __name__=="__main__":parent_conn,child_conn=Pipe()       #定义一个管道p1=Process(target=func,args=(child_conn,))  #实例化一个进程p1.start()      #启动进程 print(parent_conn.recv())       #连接接收信息并打印p1.join()   #阻塞进程 

返回结果:

[42, None, 'hello']

本文来源于python 3.5版本的官方文档

转载于:https://www.cnblogs.com/renpingsheng/p/7213987.html

python3,进程间的通信相关推荐

  1. python进程间通信时间开销_python 进程间的通信

    python3,进程间的通信 本文来源于python 3.5版本的官方文档 multiprocessing模块为进程间通信提供了两种方法: 1.进程队列queue The Queue class is ...

  2. linux+Qt 下利用D-Bus进行进程间高效通信的三种方式

    linux+Qt 下利用D-Bus进行进程间高效通信的三种方式 原文链接: https://www.cnblogs.com/wwang/archive/2010/10/27/1862552.html ...

  3. 同步线程和进程间的通信

    最近回去学习了一下进程和进程间的通信,有时候很多东西久不看了也就一下子忘了== 这里面有好几个互斥对象使用线程的 1 void mListText(CString str) 2 { 3 m_list_ ...

  4. Android 使用AIDL实现进程间的通信

    在Android中,如果我们需要在不同进程间实现通信,就需要用到AIDL技术去完成. AIDL(android Interface Definition Language)是一种接口定义语言,编译器通 ...

  5. 【转载】进程间的通信之剪贴板方法实现源码

    1 源码无私奉献 2 3 void CClipboardDlg::OnBnClickedButton1() 4 { 5 // TODO: 在此添加控件通知处理程序代码 6 //打开剪贴板 7 if(O ...

  6. 进程间的通信IPC(无名管道和命名管道)

    进程间的通信IPC介绍 进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息. IPC的方式通常有管道(包括无名管道和命名管道).消息队列.信号量 ...

  7. Linux系统编程(三)进程间的通信

    Linux系统编程(三)进程间的通信 一.为什么需要进程之间的通信(IPC)? 二.管道 1.概念 2.特质 3.原理 4.局限性 5.代码 2.读入数据 三.共享存储映射 注意事项 父子进程通信 一 ...

  8. 进程间的通信——无名管道

    进程间的通信--无名管道 宗旨:技术的学习是有限的,分享的精神是无限的. 一.进程间的通信 (1)同主机进程间数据交互机制:无名管道(PIPE),有名管道(FIFO).消息队列和共享内存.无名管道多用 ...

  9. 进程间的通信之1-----管道

    进程间的通信之1-----管道 1.标准流管道 像文件操作有标准 io 流一样, 管道也支持文件流模式. 用来创建连接到另一进程的管道, 是通过函数 popen 和 pclose. 函数原型: #in ...

最新文章

  1. EF 批量 添加 修改 删除
  2. 将oracle冷备份恢复到另外一个数据库实例中
  3. 准备入门IC的全局观念系列-中
  4. ElasticSearch面试 - es 在数据量很大的情况下如何提高查询效率啊?
  5. 一个数组中的元素头尾两端依次对调
  6. 【BZOJ4353】Play with tree,树链剖分线段树
  7. SharePoint2010添加webpart找不到内容编辑器
  8. JS字符串转换为数字,Number(),parseInt()和parseFloat()的区别
  9. Linux命令学习手册-gpg命令
  10. unity,生成的mac版游戏切场景时卡死解法
  11. android fresco 存储,Android使用Fresco之下载图片(包括GIF图)
  12. Oracle图书馆借阅管理数据库,图书借阅系统的oracle数据库
  13. 长江大学计算机基础试卷2018 2019,长江大学2017年第一学期-计算机基础试卷.doc
  14. 统计软件 | Jamovi简介
  15. Java多线程+IO流+网络编程+MySQL+JDBC编程实现多人联机版坦克大战
  16. 扩展:收藏网上胖友的面试题
  17. TVS (瞬态二极管)
  18. 【Codecs系列】GDR(Gradual Decoder Refresh)帧
  19. 车载FAKRA和HSD连接器
  20. 位置式Pid和增量式Pid的定义及应用

热门文章

  1. linux网络图标在哪,如何在Linux中设置快捷方式图标
  2. Python入门--函数传递过程中实参的变化
  3. WPF MVVM模式 发送DataGird表格的数据到另一个页面显示
  4. 七种方法实现单例模式
  5. Internet流量监管机制之漏桶算法和令牌桶算法
  6. 私有继承与保护继承(protected 成员)
  7. 一个demo学会js
  8. 开源媒体标注系统cvat
  9. hbase权限管理(访问控制标签ACL)
  10. python爬虫案例——糗事百科数据采集