Pipe常用来在两个进程间进行通信,两个进程分别位于管道的两端。
Pipe方法返回(conn1, conn2)代表一个管道的两个端。Pipe方法有duplex参数,如果duplex参数为True(默认值),那么这个参数是全双工模式,也就是说conn1和conn2均可收发。若duplex为False,conn1只负责接收消息,conn2只负责发送消息。send和recv方法分别是发送和接受消息的方法。例如,在全双工模式下,可以调用conn1.send发送消息,conn1.recv接收消息。如果没有消息可接收,recv方法会一直阻塞。如果管道已经被关闭,那么recv方法会抛出EOFError。
示例:创建两个进程,一个子进程通过Pipe发送数据,一个子进程通过Pipe接收数据。
# -*- coding: utf-8 -*-
# User: jier
# QQ: 2276845534
import multiprocessing
import random
import time, os
def proc_send(pipe, urls):
for url in urls:
print("Process (%s) send: %s" % (os.getpid(), url))
pipe.send(url)
time.sleep(random.random())
def proc_recv(pipe):
while True:
print("Process (%s) rev: %s" % (os.getpid(), pipe.recv()))
time.sleep(random.random())
if __name__ == '__main__':
pipe = multiprocessing.Pipe()
p1 = multiprocessing.Process(target=proc_send, args=(pipe[0], ['url_' + str(i) for i in range(10)]))
p2 = multiprocessing.Process(target=proc_recv, args=(pipe[1],))
p1.start()
p2.start()
p1.join()
p2.join()
输出信息为:
Process (12148) send: url_0
Process (18820) rev: url_0
Process (12148) send: url_1
Process (18820) rev: url_1
Process (12148) send: url_2
Process (12148) send: url_3
Process (18820) rev: url_2
Process (12148) send: url_4
Process (18820) rev: url_3
Process (12148) send: url_5
Process (18820) rev: url_4
Process (12148) send: url_6
Process (18820) rev: url_5
Process (18820) rev: url_6
Process (12148) send: url_7
Process (18820) rev: url_7
Process (12148) send: url_8
Process (18820) rev: url_8
Process (12148) send: url_9
Process (18820) rev: url_9
724

被折叠的 条评论
为什么被折叠?



