默认情况,Python因为GIL的存在,只会调用一个CUP作为单个进程执行程序。即便是采用多线程,也是使用同一个CPU。但是目前电脑大多都有多核。
Python3.2之后提供了一个新的模块concurrent.futures
模块可以实现多进程多线程。
concurrent.futures
是对multiprocessing
和threding
这两个模块进一步封装的结果。
生产-消费者模型中,生产者负责向队列种传入数据,消费者负责从队列种获取数据并处理。生产者不关心消费者什么时候处理完数据,也不关心消费者处理的结果。
Future模式是生产-消费者的一种扩展,可以让生产者等待消息处理完成,甚至获取相关结算结果。
-
concurrnet.futures官方文档
模块提供了两种Executor,一种是ProcessPoolExecutor(多进程,计算密集型任务),一种是ThreadPoolExecutor(多线程,适用IO密集型任务)。
concurrnet.futures模块的构成部分如下:
concurrnet.futures.Executor
一个虚拟基类,上述两种子类。concurrent.futures.ThreadPoolExecutor(max_