
Python提升回测速度concurrnet.futures模块详解
发布日期:2021-05-07 14:29:19
浏览次数:10
分类:原创文章
本文共 1216 字,大约阅读时间需要 4 分钟。
默认情况,Python因为GIL的存在,只会调用一个CUP作为单个进程执行程序。即便是采用多线程,也是使用同一个CPU。但是目前电脑大多都有多核。
Python3.2之后提供了一个新的模块concurrent.futures
模块可以实现多进程多线程。
concurrent.futures
是对multiprocessing
和threding
这两个模块进一步封装的结果。
-
Future模式
生产-消费者模型中,生产者负责向队列种传入数据,消费者负责从队列种获取数据并处理。生产者不关心消费者什么时候处理完数据,也不关心消费者处理的结果。
Future模式是生产-消费者的一种扩展,可以让生产者等待消息处理完成,甚至获取相关结算结果。
-
concurrnet.futures
模块提供了两种Executor,一种是ProcessPoolExecutor(多进程,计算密集型任务),一种是ThreadPoolExecutor(多线程,适用IO密集型任务)。
concurrnet.futures模块的构成部分如下:
concurrnet.futures.Executor
一个虚拟基类,上述两种子类。concurrent.futures.ThreadPoolExecutor(max_workers)
max_workers = 5表示最多由5个worker并行执行任务concurrent.futures.ProcessPoolExecutor(max_workers)
submit(function, argument)
调度函数(可调用的对象)的执行,将argument作为function的参数传入。map(function, argument)
执行函数,argument作为参数,以异步的方式shutdown(Wait= True)
发出让执行者释放所有资源的信号concurrnet.futures.Future
Future对象是submit任务(即带有参数的functions)到executor的实例。
-
多线程举例
# ===任务def each_task(n): x = n * n * n return xexecutor = ProcessPoolExecutor(3) # 实例化进程池start_time = time.time()df = []for i in [10, 100, 1000]: df.append(executor.submit(each_task, i)) # 提交任务wait(df) # 等待计算结束end_time = time.time()print(end_time - start_time)executor.shutdown() # 销毁进程池exit()
-
Reference
.
.
.
2019-04-09 17:06:20
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月10日 06时39分27秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
逆合成孔径雷成像(一)— 傅里叶变换基础1
2019-03-04
elf格式静态链接和动态链接
2019-03-04
openthread编译错误:error: could not find ctags
2019-03-04
7628 EDCCA认证寄存器修改(认证自适应)
2019-03-04
C#四行代码写简易计算器,超详细带注释(建议新手看)
2019-03-04
计算机网络子网划分错题集
2019-03-04
java一些基本程序
2019-03-04
数据结构之排序
2019-03-04
数据结构经典十套卷之八
2019-03-04
修改jupyter保存文件目录
2019-03-04
tensorflow入门变量常量
2019-03-04
卷积神经网络六之CNN反向传播计算过程
2019-03-04
神经元与神经网络一之概述
2019-03-04
神经网络二之手写数字识别
2019-03-04
神经网络四之计算损失函数
2019-03-04
神经网络六之反向传播
2019-03-04
计算机网络五层协议
2019-03-04
第五章 数字滤波器的基本结构之三
2019-03-04
第六章 IIR数字滤波器的设计方法之三全通系统
2019-03-04
深度图像的获取原理
2019-03-04