python 多进程 —— 进程间通信
来源:互联网 发布:拱拱淘宝工具箱下载 编辑:程序博客网 时间:2024/06/04 23:37
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, Queueimport osimport timeimport 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: 5836Process to write: 6472Put 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, Pipedef 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']666Process finished with exit code 0
- python 多进程 —— 进程间通信
- python 进程间通信
- python : 进程间通信
- python 进程间通信
- python 进程间通信
- python 进程间通信
- python进程间通信
- 【Python】进程间通信
- python 多进程实例 进程间的通信
- Python基础-多进程-线程池Pool-进程间通信
- python 进程间通信【转】
- Python 进程间通信 Queue
- python进程间通信-Queue
- python 多进程通信模块
- python多进程通信例子
- 进程间通信—信号量
- 进程间通信—管道
- 进程间通信—管道
- java web开发之本地hosts文件配置
- location中locflag 1为空仓,2,为占用,3为满仓
- Nginx为什么比Apache Httpd高效:原理篇
- JAVA—日期格式化
- JavaScript
- python 多进程 —— 进程间通信
- TextureView+SurfaceTexture+OpenGL ES来播放视频(一)
- 利用zxing和zbar 实现扫一扫功能
- 装饰模式
- nginx+lua 构建waf防火墙
- Spark中自定义排序
- 动态分配数组C++模板
- 公司做网站选择建站的几大原则
- 泛型集合List<T> 的详细用法