python-进程间通信(IPC)

概述

进程间通信,英文 Inter-Process Communication,缩写 IPC

在前面的章节中,讲过多进程默认不能共享全局变量,要想共享全局变量,需要 进程间通信

进程间通信,需要操作系统的支持,在windows、unix、linux系统中,支持 多种 进程间通信

python是 跨平台 语言,为了 实现跨平台 ,要 舍弃 某操作系统 独有 的功能,保留 共有 、且 常用 的功能

python为了提供更多且简单的功能,又实现了一些进程间通信的方式

进程间通信的方式

共享文件

一个进程写文件,一个进程读文件

multiprocessing模块

从multiprocessing.context.py文件中的BaseContext类可知,有如下方式:

进程间通信:

  1. Manager
  2. Pipe
  3. Queue
    后面有讲
  4. JoinableQueue
  5. SimpleQueue
  6. Value
    后面有讲
  7. RawValue
  8. RawArray
  9. Array
    后面有讲

进程间协作:

  1. Lock
    后面有讲
  2. RLock
    进程对资源进行加锁后,该进程还能继续对该资源加锁,加锁和释放锁的数量必须是一样的。
    避免死锁
  3. Condition
    让一个或多个进程等待,直到被另一个进程通知后,才能继续执行
  4. Semaphore
    信号量,可以 指定 同时访问资源或者进入临界区域的 最大进程数
    案例:咖啡厅最多容纳30人,当有50个客人时,只有前30位客人就餐,其他20位在等待,当有一位客人出来后,才能进去一位客人
  5. BoundedSemaphore
    同Semaphore,是 有限制的信号量
  6. Event
    一个进程控制其他进程 执行 还是 等待
  7. 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


原文出处:/show_1EF2ooWiiWKJ.html