多进程实现消息队列
所谓消息队列,个人理解就是一个管道或者容器,用来存放生产者生产的消息,而消费者就从管道中取消息消费。这里提到的有三个对象:生产者、消费者、容器/管道/中间人,其中生产者和消费者是两个独立的进程,即它们不能相互通信(进程间不共享全局变量)。所以我们要借助一个中间人来帮我们。多进程实现消息队列原理就是创建两个子进程,让它们分别充当生产者和消费者。这里借助multiprocessing模块中的Queue和Process。
from multiprocessing import Queue, Process
def producer(q):
for i in range(5):
q.put(i)
print('put {0} in queue'.format(i))
def customer():
while True:
res = q.get()
print('get {0} from queue'.format(res))
def main():
q = Queue()
sub_process1 = Process(target=producer, args=(q,))
sub_process2 = Process(target=customer)
sub_process1.start()
sub_process2.start()
#由于进程的执行是无序的,使用join()方法,让sub_process1结束后在执行sub_process2
sub_process1.join()
#终结死循环
sub_process2.terminate()
if __name__ = 'main':
main()
执行结果
put 1 in queue
put 2 in queue
p