在项目开展过程中用到了进程间通信,这里详细记录一下python的进程间通信
主要模块:multiprocessing
主要类:multiprocessing.Pipe()
主要函数:multiprocessing.Pipe().send(), multiprocessing.Pipe().recv()
源代码示例
# -*- coding: utf-8 -*-
import random
import time
import os
import multiprocessing
def proc_send(pipe, signals):
for sig in signals:
print("Process (%s) 发送: %s" % (os.getpid(), sig))
pipe.send(sig)
time.sleep(random.random())
##发送结束进程信号
print("Process (%s) 发送: %s" % (os.getpid(), 'stop'))
pipe.send("stop")
def proc_receiver(pipe):
while True:
rec=pipe.recv()
print("Process (%s) 收到: %s" % (os.getpid(), rec))
time.sleep(random.random())
##结束进程信号
if 'stop' in str(rec):
break
if __name__ == '__main__':
'''
Pipe返回接收端和发送端,pipe[0]是接收,pipe[1]是发送
duplex=False表示半双工,发送端只能发送,接收端只能接受
duplex=True表示全双工,两端既能发送又能接收
'''
pipe = multiprocessing.Pipe(duplex=False)
print(pipe)
##创建进程
p1 = multiprocessing.Process(target=proc_send, args=(pipe[1], ['hello ' + str(i) for i in range(10)]))
p2 = multiprocessing.Process(target=proc_receiver, args=(pipe[0],))
##启动进程
p1.start()
p2.start()
##结束进程
p1.join()
p2.join()
输出结果