概述
进程间通信,英文 Inter-Process Communication,缩写 IPC
在前面的章节中,讲过多进程默认不能共享全局变量,要想共享全局变量,需要 进程间通信
进程间通信,需要操作系统的支持,在windows、unix、linux系统中,支持 多种 进程间通信
python是 跨平台 语言,为了 实现跨平台 ,要 舍弃 某操作系统 独有 的功能,保留 共有 、且 常用 的功能
python为了提供更多且简单的功能,又实现了一些进程间通信的方式
进程间通信的方式
共享文件
一个进程写文件,一个进程读文件
multiprocessing模块
从multiprocessing.context.py文件中的BaseContext类可知,有如下方式:
进程间通信:
- Manager
- Pipe
- Queue
后面有讲 - JoinableQueue
- SimpleQueue
- Value
后面有讲 - RawValue
- RawArray
- Array
后面有讲
进程间协作:
- Lock
后面有讲 - RLock
进程对资源进行加锁后,该进程还能继续对该资源加锁,加锁和释放锁的数量必须是一样的。
避免死锁 - Condition
让一个或多个进程等待,直到被另一个进程通知后,才能继续执行 - Semaphore
信号量,可以 指定 同时访问资源或者进入临界区域的 最大进程数
案例:咖啡厅最多容纳30人,当有50个客人时,只有前30位客人就餐,其他20位在等待,当有一位客人出来后,才能进去一位客人 - BoundedSemaphore
同Semaphore,是 有限制的信号量 - Event
一个进程控制其他进程 执行 还是 等待 - Barrier
设置了一个进程数量障碍,当等待的进程到达了这个数量就会唤醒所有的等待进程,继续运行
os模块
os模块下有对unix、linux操作系统进程间通信的方法,但是不能跨平台,不能运行在windows系统
socket
主要用于网络间进程通信,也可以实现本地进程通信
总结
上面的方式各有优劣,在不同的应用场景中,可以很方便的实现进程间通信
感谢:
https://www.jianshu.com/p/5eb388340038
https://www.cnblogs.com/lonelyshy/p/9720599.html
https://www.cnblogs.com/sunny-smile/p/3957782.html
BoundedSemaphore:
https://blog.csdn.net/wo198711203217/article/details/83748575
https://blog.csdn.net/a349458532/article/details/51589460
Condition
https://blog.csdn.net/freeking101/article/details/52511837