Process
之间肯定是需要通信的,操作系统提供了很多机制来实现进程间的通信。Python的multiprocessing
模块包装了底层的机制,提供了Queue
、Pipes
等多种方式来交换数据。
我们以Queue
为例,在父进程中创建两个子进程,一个往Queue
里写数据,一个从Queue
里读数据:
#coding=utf-8
__author__ = 'lenovo'
from multiprocessing import Queue,Process
import os,time,random
#写数据进程
def write(q):
for value in ['a','b','c','d']:
print 'put %s in 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()
运行的结果如下:这是在Windows下的使用方式,在LINUX下面可以用fork()更快捷