队列
IPC机制:进程通讯
管道:pipe,基于共享的内存空间
队列:pipe+锁
from multiprocessing import Queue
q = Queue()
q.put(3) # 放值
q.get() # 拿值
队列不适合传大文件,通常传一些消息
生产者消费者模型
生产者:生产数据的任务
消费者:处理数据的任务
生产者--->队列--->消费者
生产者可以不停的生产,达到了自己最大的生产效率;消费者可以不停的消费,达到了自己最大的消费效率。
生产者消费者模型大大提高了生产者生产的效率和消费者消费的效率。
from multiprocessing import Process,JoinableQueue
import time
import random
def producer(q, name, food):
for i in range(3):
print(f'{name}生产了{food}{i}')
time.sleep(random.randint(1, 3))
res = f'{food}{i}'
q.put(res)
def consumer(q, name):
while True:
res = q.get()
time.sleep(random.randint(1, 3))
print(f'{name}吃了{res}')
q.task_done()
if __name__ == '__main__':
q = JoinableQueue()
p1 = Process(target=producer, args=(q, 'xiaowu', '肉包'))
p2 = Process(target=producer, args=(q, 'liyi', '豆沙包'))
p3 = Process(target=producer, args=(q, 'guapi', '菜包'))
c1 = Process(target=consumer, args=(q, '张三'))
c2 = Process(target=consumer, args=(q, '李四'))
p1.start()
p2.start()
p3.start()
c1.daemon = True
c2.daemon = True
c1.start()
c2.start()
p1.join()
p2.join()
p3.join()
q.join()