data = q.get(data)
举例:
from multiprocessing import Queue, Process
def write(q):
for i in ['a','b','c','d']:
q.put(i)
print ('put {0} to queue'.format(i))
def read(q):
while 1:
result = q.get()
print ("get {0} from queue".format(result))
def main():
q = Queue()
pw = Process(target=write,args=(q,))
pr = Process(target=read,args=(q,))
pw.start()
pr.start()
pw.join()
pr.terminate() #停止
# 相当于join,等pr完成以后,当whlie没有任何执行后,结束。
if __name__ == '__main__':
main()
返回结果:
put a to queue
get a from queue
put b to queue
get b from queue
put c to queue
get c from queue
put d to queue
get d from queue
PIPE:
多进程里面有个pipe的方法来实现消息队列:
1. Pipe 方法返回(conn1, conn2)代表一个管道的两端。PIPE方法有个deplex参数,如果deplex参数为True(默认值),那么这个管道是全双工模式,也就是说conn1和conn2均可收发。duplex为False,conn1只负责接收消息,conn2负责发送消息。
2.send 和recv方法分别是发送和接受消息的方法。close方法表示关闭管道,当消息接收结束以后,关闭管道。
import time
from multiprocessing import Pipe, Process
def proc1(pipe):
for i in xrange(1, 10):
pipe.send(i)
print ("send {0} to pipe".format(i))
time.sleep(1)
def proc2(pipe):
n = 9
while n > 0:
result = pipe.recv()
print ("recv {0} from pipe".format(result))