文件效率低和加锁处理
队列和管道用的都是内存的空间 ,一块共享内存
队列就是管道加锁
队列是多个进程通信使用的,一个进程可以把数据放到队列里面 ,另外进程可以从队列取走数据
最大的好处程序的解耦,附加的好处平衡了生产者和消费者的速度差
引入队列来解决他们的耦合度
生产者 <—> 队列 <—> 消费者
如果真的用了Queue来创造生产者和消费者,依偎着生产者和消费者和Queue必须在同一台机器上
以后的队列用 rabbitmq或者activemq
有几个消费者 ,来几个信号
from multiprocessing import Process,Lock,Queue
import time
#生产
#生产者在最后一次给我发个信号,保证消费者把正常的数据取走了,这个信号说明生产完了
def producer(q):
for i in range(5):
res = "包子%s" %i
time.sleep(0.5)
print('生产者生产了%s' %res)
q.put(res)
#消费
def consumer(q):
while True:
res = q.get()
if res is None:break
time.sleep(1)
print('消费者吃了%s' % res)
if __name__ == '__main__':
#容器 队列
q = Queue()
#生产者们
p1 = Process(target=producer, args=(q,))
#p2 = Process(target=producer, args=(q,))
#p3 = Process(target=producer, args=(q,))
#消费者门
c1 = Process(target=consumer, args=(q,))
#c2 = Process(target=consumer, args=(q,))
p1.start()
#p2.start()
#p3.start()
c1.start()
#c2.start()
#保证主进程的p1的子进程都已经运行完了,生产者把10个数据全都丢进去了 在写p1.join()
p1.join()
#p2.join()
#p3.join()
#跟到正常数据的后面 有几个消费者就来几个信号
q.put(None)
#q.put(None)
print('主')