python多进程实现进程间通信实例


Posted in Python onNovember 24, 2017

python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程。Python提供了非常好用的多进程包multiprocessing,只需要定义一个函数,Python会完成其他所有事情。借助这个包,可以轻松完成从单进程到并发执行的转换。multiprocessing支持子进程、通信和共享数据、执行不同形式的同步,提供了Process、Queue、Pipe、Lock等组件。

multiprocessing.Queue()

以Queue为例,在父进程中创建两个子进程,一个往Queue里写数据,一个从Queue里读数据:

multiprcessing.Queue.put() 为 入队操作

multiprcessing.Queue.get() 为 出队操作

队列 线程 和 进程 安全

put(obj[, block[, timeout]])

将obj放入队列。 如果可选参数 block为True(默认值),timeout为None(默认值),则必要时阻止,直到空闲插槽可用。 如果超时是正数,它将阻止最多超时秒数,如果在该时间内没有空闲插槽可用,则会引发Queue.Full异常。 否则(块为False),如果空闲插槽立即可用,则将一个项目放在队列中,否则会引发Queue.Full异常(在这种情况下,忽略超时)。

get([block[, timeout]])

从队列中删除并返回一个项目。 如果可选的args块为True(默认值),超时为None(默认值),则在必要时阻止,直到项目可用。 如果超时为正数,则它将阻塞至多超时秒数,并在该时间内没有可用项目时引发Queue.Empty异常。 否则(block为False),如果一个项目立即可用,返回一个项目,否则会引发Queue.Empty异常(在这种情况下,忽略超时)。

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


# 写数据进程执行的代码:
  def write(q):
  print('Process to write: %s' % os.getpid())
for value in ['A', 'B', 'C']:
  print('Put %s to queue...' % value)
q.put(value)
time.sleep(random.random())

# 读数据进程执行的代码:
  def read(q):
  print('Process to read: %s' % os.getpid())
while True:
  value = q.get()
print('Get %s from queue.' % value)

if __name__ == '__main__': #父进程创建Queue, 并传给各个子进程:
q = Queue()
pw = Process(target = write, args = (q, ))
pr = Process(target = read, args = (q, ))# 启动子进程pw, 写入:
  pw.start()# 启动子进程pr, 读取:
  pr.start()# 等待pw结束:
  pw.join()# pr进程里是死循环, 无法等待其结束, 只能强行终止:
  pr.terminate()

输出

Process to read: 5836
Process to write: 6472
Put A to queue...
Put B to queue...
Get A from queue.
Put C to queue...
Get B from queue.
Get C from queue.

Process finished with exit code 0

multiprocessing.Pipe()

Pipe()函数返回一对由管道连接的连接对象,默认情况下是双工(双向)。

Pipe()返回的两个连接对象代表管道的两端。 每个连接对象都有send()和recv()方法(等等)。 请注意,如果两个进程(或线程)尝试同时读取或写入管道的同一端,管道中的数据可能会损坏。 当然,同时使用管道不同端的过程也不会有风险。

返回表示管道末端的一对Connection(conn1,conn2)对象。

如果duplex为True(默认),则管道是双向的。

如果duplex是False,那么管道是单向的:conn1只能用于接收消息,conn2只能用于发送消息。

#- * -coding: utf - 8 - * -
  from multiprocessing
import Process, Pipe

def f(conn):
  conn.send([42, None, 'hello'])
while True:
  print(conn.recv())

if __name__ == '__main__':
  parent_conn, child_conn = Pipe()
p = Process(target = f, args = (child_conn, ))
p.start()
print parent_conn.recv()# prints "[42, None, 'hello']"
parent_conn.send('666')
p.terminate()

输出:

[42, None, 'hello']
666

Process finished with exit code 0

总结

以上就是本文关于python多进程实现进程间通信实例的全部内容,希望对大家有所帮助。感兴趣的朋友可继续参阅本站:

如有不足之处,欢迎留言指出。

Python 相关文章推荐
Python2.7简单连接与操作MySQL的方法
Apr 27 Python
python 垃圾收集机制的实例详解
Aug 20 Python
Python操作MySQL模拟银行转账
Mar 12 Python
利用Python如何生成便签图片详解
Jul 09 Python
python使用xlrd模块读取xlsx文件中的ip方法
Jan 11 Python
python多线程实现TCP服务端
Sep 03 Python
Python list运算操作代码实例解析
Jan 20 Python
Python实现检测文件的MD5值来查找重复文件案例
Mar 12 Python
Python Scrapy多页数据爬取实现过程解析
Jun 12 Python
python 批量下载bilibili视频的gui程序
Nov 20 Python
python 基于UDP协议套接字通信的实现
Jan 22 Python
python实现股票历史数据可视化分析案例
Jun 10 Python
Python实现列表删除重复元素的三种常用方法分析
Nov 24 #Python
Python二叉树的定义及常用遍历算法分析
Nov 24 #Python
详解python上传文件和字符到PHP服务器
Nov 24 #Python
Python实现矩阵转置的方法分析
Nov 24 #Python
利用Django内置的认证视图实现用户密码重置功能详解
Nov 24 #Python
利用python3随机生成中文字符的实现方法
Nov 24 #Python
Python内置函数 next的具体使用方法
Nov 24 #Python
You might like
php实现用户在线时间统计详解
2011/10/08 PHP
php实现二进制和文本相互转换的方法
2015/04/18 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
Aster vs Newbee BO5 第二场2.19
2021/03/10 DOTA
理解Javascript_08_函数对象
2010/10/15 Javascript
jQuery获得页面元素的绝对/相对位置即绝对X,Y坐标
2014/03/06 Javascript
jquery实现带缩略图的全屏图片画廊效果实例
2015/06/25 Javascript
基于Javascript实现二级联动菜单效果
2016/03/04 Javascript
浅谈JavaScript中的分支结构
2016/07/01 Javascript
AngularJS基础 ng-copy 指令实例代码
2016/08/01 Javascript
关于js原型的面试题讲解
2016/09/25 Javascript
js通过指定下标或指定元素进行删除数组的实例
2017/01/12 Javascript
微信小程序 基础组件与导航组件详细介绍
2017/02/21 Javascript
详解react-refetch的使用小例子
2019/02/15 Javascript
vue实现新闻展示页的步骤详解
2019/04/11 Javascript
python3 对list中每个元素进行处理的方法
2018/06/29 Python
Python用csv写入文件_消除空余行的方法
2018/07/06 Python
对python的输出和输出格式详解
2018/12/08 Python
Python环境Pillow( PIL )图像处理工具使用解析
2019/09/12 Python
Pandas 缺失数据处理的实现
2019/11/04 Python
使用Pyhton集合set()实现成果查漏的例子
2019/11/24 Python
Python实现手势识别
2020/10/21 Python
纯css3实现照片墙效果
2014/12/26 HTML / CSS
巴西服装和鞋子购物网站:Marisa
2018/10/25 全球购物
图库照片、免版税图片、矢量艺术、视频片段:Depositphotos
2019/08/02 全球购物
Kickers鞋英国官网:男士、女士和儿童鞋
2021/03/08 全球购物
linux面试题参考答案(9)
2016/01/29 面试题
2014信息公开实施方案
2014/02/22 职场文书
打造高效课堂实施方案
2014/03/22 职场文书
金融管理专业求职信
2014/07/10 职场文书
护理医院见习报告
2014/11/03 职场文书
一文读懂go中semaphore(信号量)源码
2021/04/03 Golang
Python趣味挑战之给幼儿园弟弟生成1000道算术题
2021/05/28 Python
深入解析Apache Hudi内核文件标记机制
2022/03/31 Servers
python实现双向链表原理
2022/05/25 Python