python 进程间通信(原创)


                                                作者: pascal4123
出处: pascal4123.cublog.cn
(转载敬请注明作者或出处)
当脚本产生大量线程时,很自然地,线程间会产生通信(改变和访问共享全局内存)的需求。有些情况需要小心对待,使用锁来同步对共享对象的访问。但这是一种比较老实的通信模式。
当脚本启动进程或程序时,事情并没有这么简单。如果我们限制程序间通信的类型,有许多手段。比如:
1. 命令行参数
2. 标准流重定向
3. os.popen调用产生的管道
4. 程序退出状态码
5. shell 环境变量
6. 甚至简单的文件
除了这些之外,还有其他的IPC工具。比如socket模块,可以让我们在同1台机器上的两个程序传递数据,就像2个远程程序一样。
又再比如mmap模块。
这里我们重点介绍 pipes 和 signal。
管道(pipes)
管道, 是另一种跨程序的通信设施。 它用os.pipe调用产生。 管道是单向双端接口的隧道,1端读1端写。一个形象化管道的描述为——一个在两个实体之间的单向连接器。
管道也是一种同步2个互不依赖的程序的方式。
管道简单易用,但缺乏socket的广泛性。
管道分匿名管道,有名管道。
匿名管道基本原理
匿名管道可看作父进程、子进程间通信的典型应用。
从1个独立的进程分支时需要用到匿名管道。
有名管道基本原理
有名管道(FIFO)只能用于两个共享文件系统的2个进程间的通信。使用有名管道的好处是能在两个独立的进程间进行通信。