Python 多进程 进程间通讯
2018-04-09 07:23
579 查看
进程间通信
Process之间肯定是需要通信的,操作系统提供了很多机制来实现进程间的通信。Python的
multiprocessing模块包装了底层的机制,提供了
Queue、
Pipes等多种方式来交换数据。
我们以
Queue为例,在父进程中创建两个子进程,一个往
Queue里写数据,一个从
Queue里读数据
在Unix/Linux下,
multiprocessing模块封装了
fork()调用,使我们不需要关注
fork()的细节。由于Windows没有
fork调用,因此,
multiprocessing需要“模拟”出
fork的效果,父进程所有Python对象都必须通过pickle序列化再传到子进程去,所有,如果
multiprocessing在Windows下调用失败了,要先考虑是不是pickle失败了。
from multiprocessing import Process, Queue import os, time, random # 写数据进程执行的代码: def write(q): for value in range(10): print('Put %s to queue...' % value) q.put(value) time.sleep(random.random()) # 读数据进程执行的代码: def read(q): while True: value = q.get(True) 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()
结果
Put 0 to queue... Get 0 from queue. Put 1 to queue... Get 1 from queue. Put 2 to queue... Get 2 from queue. Put 3 to queue... Get 3 from queue. Put 4 to queue... Get 4 from queue. Put 5 to queue... Get 5 from queue. Put 6 to queue... Get 6 from queue. Put 7 to queue... Get 7 from queue. Put 8 to queue... Get 8 from queue. Put 9 to queue... Get 9 from queue.
相关文章推荐
- python基础-Process创建进程、join方法、实现ftp多进程
- 基于进程内通讯的python聊天室实现方法
- Python多进程 - 实现多进程的几种方式
- python的多线程与多进程介绍及多进程详解(调用multiprocessing组件)
- python 简单搭建阻塞式单进程,多进程,多线程服务
- python学习笔记(3)-进程和线程(一)-多进程
- python多进程、进程间通信、进程锁
- python --- 多线程处理(单进程/多进程)
- python学习—Day41—多进程锁与多进程共享内存
- 基于进程内通讯的python聊天室实现方法
- Python 多进程,进程加锁(RLock),进程执行乱序(进程同步)
- MySQL 5.5 DBA工具 多进程dump 多进程load 多进程备份还原 python 脚本
- Python之多进程、多线程、协程和分布式进程
- Python学习笔记(二十七)多进程 (进程和线程开始)
- [Python]zeromq:socket request/receive, 发布/订阅消息, 进程间通讯
- python多进程,进程迭代创建,造成电脑死机的问题解决
- Python进阶(4)_进程与线程 (python并发编程之多进程)
- python学习笔记——多进程二 进程的退出
- Python的线程/进程间通讯对象分析
- 11.python并发入门(part10 多进程之间实现通信,以及进程之间的数据共享)