并发编程的那些事儿
Posted wf123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并发编程的那些事儿相关的知识,希望对你有一定的参考价值。
1、生产者和消费者模型
作用:用于解耦。
原理:生产者将生产的数据放到缓存区,消费者从缓存区直接取。借助队列来实现该模型(队列就是缓存区)
队列是安全的,自带锁机制。
q = Queue(num) num 为队列的最大长度,可以自己设定。
q.put(): 向队列里放数据,如果数据满了就阻塞等待,如果还能放就直接放如。
q.get(): 阻塞等待获取数据,如果队列中有数据直接拿,没有就等待。
q.put_nowait(): 不阻塞,向队列里放数据,如果数据满了就直接报错。
q.get_nowait(): 不阻塞,直接从队列拿数据,如果没有数据就直接报错。
方法一:
用 Queue (队列)模块编写
from multiprocessing import Process, Queue def producer(q, production): for i in range(10): info = production + ‘打败了第%s只 小怪兽‘ % (i + 1) q.put(info) q.put(None) # 当生产者生产完之后,放一个None def consumer(q, name): while 1: info = q.get() if info: print(‘%s%s‘ % (name, info)) else: # 当info 中没有产品了,就会收到一个None,此时结束进程 break if __name__ == ‘__main__‘: q = Queue() p1 = Process(target=producer, args=(q, ‘奥德曼‘)) p2 = Process(target=consumer, args=(q, ‘迪迦‘)) p1.start() p2.start()
方法二:
用Queue(队列)模块编写
from multiprocessing import Process, Queue def producer(q, production): for i in range(10): info = production + ‘打败了第%s只 小怪兽‘ % (i + 1) q.put(info) def consumer(q, name, color): while 1: info = q.get() if info: print(‘%s%s%s 33[0m‘ % (color, name, info,)) else: break if __name__ == ‘__main__‘: q = Queue(5) p1 = Process(target=producer, args=(q, ‘奥特曼‘)) p2 = Process(target=producer, args=(q, ‘蝙蝠侠‘)) p3 = Process(target=producer, args=(q, ‘绿巨人‘)) p4 = Process(target=consumer, args=(q, ‘刘奶奶操纵‘, ‘