博客
关于我
Python提升回测速度concurrnet.futures模块详解
阅读量:339 次
发布时间:2019-03-04

本文共 1216 字,大约阅读时间需要 4 分钟。

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

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

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

  • Future模式

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

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

  • concurrnet.futures

模块提供了两种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 * 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

转载地址:http://azwr.baihongyu.com/

你可能感兴趣的文章
泳道图简介
查看>>
Tomcat6中web项目部署路径webapps和wtpwebapps的区别
查看>>
Java判断字符串是否为金额
查看>>
CodeCombat代码全记录(Python学习利器)--安息之云山峰(第四章)代码9
查看>>
nginx配置文件nginx.conf详细讲解(2)
查看>>
nginx配置文件nginx.conf详细讲解(4)--终结篇
查看>>
某公司运维岗位笔试题8
查看>>
一个简单的shell脚本:weblogic日志按天生成(日志压缩)
查看>>
skyfans之每天一个Liunx命令系列之二:uptime
查看>>
js中的文档碎片的理解与使用
查看>>
Kubernetes十三--Pod定义文件内容详解
查看>>
3、69道Spring面试题及答案
查看>>
普歌- LRF-(简单易懂)笔记本电脑USB接口案例 接口多态(向下转型)
查看>>
Java中如何构建树结构
查看>>
若依启动流程
查看>>
解决vue部署到nginx后刷新404
查看>>
解决eclipse字体背景变红或者变绿的问题
查看>>
一个面试大牛的经历
查看>>
浮点数在内存中的存储
查看>>
扫雷小游戏——简单易懂
查看>>