生产者-消费者模型
在很多数据采集分析、数据通讯、网络爬虫等领域,数据生产者-消费者模型具有重要的作用。在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产者。而数据采集、数据通讯等任务,CPU大部分的时间会花费在IO上,使得信号不能及时分析处理。为了解决这个问题,在多核CPU的支持下,于是引入了生产者和消费者模式。生产者和消费者在同一时间段内共用同一个存储空间,生产者往存储空间中添加产品,消费者从存储空间中取走产品,当存储空间为空时,消费者阻塞,当存储空间满时,生产者阻塞。(https://www.jianshu.com/p/f53fb95b5820)
Python多线程的不足
生产者-消费者模型一般采用多线程的方式实现,然而在python中,由于GIT全局锁的存在,多个线程还是在单个内核上分时执行,多线程程序并不能像C++等那样充分利用多核CPU的计算性能,导致单个核心性能不堪重负而其他核心性能的浪费。
Python多进程的一般示例
python中真正支持多核CPU的是多进程并行机制,一般通过调用multiprocessing.Process实现多进程的创建,并且通过multiprocessing.Queue实现生产者进程与消费者进程的数据通信。CSDN上可搜索到的典型示例如下:
多生产者、多消费者模型
# JoinableQueue是一个Queue对象,