Python提升回测速度concurrnet.futures模块详解

2024-03-30 10:58

本文主要是介绍Python提升回测速度concurrnet.futures模块详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

默认情况,Python因为GIL的存在,只会调用一个CUP作为单个进程执行程序。即便是采用多线程,也是使用同一个CPU。但是目前电脑大多都有多核。

Python3.2之后提供了一个新的模块concurrent.futures模块可以实现多进程多线程。

concurrent.futures是对multiprocessingthreding这两个模块进一步封装的结果。

  • Future模式

生产-消费者模型中,生产者负责向队列种传入数据,消费者负责从队列种获取数据并处理。生产者不关心消费者什么时候处理完数据,也不关心消费者处理的结果。

Future模式生产-消费者的一种扩展,可以让生产者等待消息处理完成,甚至获取相关结算结果。

模块提供了两种Executor,一种是ProcessPoolExecutor(多进程,计算密集型任务),一种是ThreadPoolExecutor(多线程,适用IO密集型任务)。

concurrnet.futures模块的构成部分如下:

  1. concurrnet.futures.Executor 一个虚拟基类,上述两种子类。
    1. concurrent.futures.ThreadPoolExecutor(max_workers) max_workers = 5表示最多由5个worker并行执行任务
    2. concurrent.futures.ProcessPoolExecutor(max_workers)
  2. submit(function, argument) 调度函数(可调用的对象)的执行,将argument作为function的参数传入。
  3. map(function, argument) 执行函数,argument作为参数,以异步的方式
  4. shutdown(Wait= True) 发出让执行者释放所有资源的信号
  5. concurrnet.futures.Future Future对象是submit任务(即带有参数的functions)到executor的实例。
  • 多线程举例

# ===任务
def each_task(n):x = n * n * nreturn 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

  1. 使用Python的 concurrent.futures 模块
  2. Python广为使用的并发处理库futures使用入门与内部原理
  3. Python concurrent.future 使用教程及源码初剖

.
.
.
2019-04-09 17:06:20

这篇关于Python提升回测速度concurrnet.futures模块详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/861310

相关文章

一文详解kafka开启kerberos认证的完整步骤

《一文详解kafka开启kerberos认证的完整步骤》这篇文章主要为大家详细介绍了kafka开启kerberos认证的完整步骤,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、kerberos安装部署二、准备机器三、Kerberos Server 安装1、配置krb5.con

Python结合Flask框架构建一个简易的远程控制系统

《Python结合Flask框架构建一个简易的远程控制系统》这篇文章主要为大家详细介绍了如何使用Python与Flask框架构建一个简易的远程控制系统,能够远程执行操作命令(如关机、重启、锁屏等),还... 目录1.概述2.功能使用系统命令执行实时屏幕监控3. BUG修复过程1. Authorization

Python使用DeepSeek进行联网搜索功能详解

《Python使用DeepSeek进行联网搜索功能详解》Python作为一种非常流行的编程语言,结合DeepSeek这一高性能的深度学习工具包,可以方便地处理各种深度学习任务,本文将介绍一下如何使用P... 目录一、环境准备与依赖安装二、DeepSeek简介三、联网搜索与数据集准备四、实践示例:图像分类1.

StarRocks数据库详解(什么是StarRocks)

《StarRocks数据库详解(什么是StarRocks)》StarRocks是一个高性能的全场景MPP数据库,支持多种数据导入导出方式,包括Spark、Flink、Hadoop等,它采用分布式架构,... 目录StarRocks介绍什么是StarRocks?StarRocks适合什么场景?StarRock

Python中__new__()方法适应及注意事项详解

《Python中__new__()方法适应及注意事项详解》:本文主要介绍Python中__new__()方法适应及注意事项的相关资料,new()方法是Python中的一个特殊构造方法,用于在创建对... 目录前言基本用法返回值单例模式自定义对象创建注意事项总结前言new() 方法在 python 中是一个

Python批量调整Word文档中的字体、段落间距及格式

《Python批量调整Word文档中的字体、段落间距及格式》这篇文章主要为大家详细介绍了如何使用Python的docx库来批量处理Word文档,包括设置首行缩进、字体、字号、行间距、段落对齐方式等,需... 目录关键代码一级标题设置  正文设置完整代码运行结果最近关于批处理格式的问题我查了很多资料,但是都没

Python依赖库的几种离线安装方法总结

《Python依赖库的几种离线安装方法总结》:本文主要介绍如何在Python中使用pip工具进行依赖库的安装和管理,包括如何导出和导入依赖包列表、如何下载和安装单个或多个库包及其依赖,以及如何指定... 目录前言一、如何copy一个python环境二、如何下载一个包及其依赖并安装三、如何导出requirem

Mysql中InnoDB与MyISAM索引差异详解(最新整理)

《Mysql中InnoDB与MyISAM索引差异详解(最新整理)》InnoDB和MyISAM在索引实现和特性上有差异,包括聚集索引、非聚集索引、事务支持、并发控制、覆盖索引、主键约束、外键支持和物理存... 目录1. 索引类型与数据存储方式InnoDBMyISAM2. 事务与并发控制InnoDBMyISAM

StarRocks索引详解(最新整理)

《StarRocks索引详解(最新整理)》StarRocks支持多种索引类型,包括主键索引、前缀索引、Bitmap索引和Bloomfilter索引,这些索引类型适用于不同场景,如唯一性约束、减少索引空... 目录1. 主键索引(Primary Key Index)2. 前缀索引(Prefix Index /

一文详解Nginx的强缓存和协商缓存

《一文详解Nginx的强缓存和协商缓存》这篇文章主要为大家详细介绍了Nginx中强缓存和协商缓存的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、强缓存(Strong Cache)1. 定义2. 响应头3. Nginx 配置示例4. 行为5. 适用场景二、协商缓存(协