当前位置: 首页 > news >正文

中航建设集团有限公司网站国际新闻界期刊

中航建设集团有限公司网站,国际新闻界期刊,seo引擎,react 网站开发使用concurrent.futures模块启动进程 concurrent.futures 模块的文档 (https://docs.python.org/3/library/concurrent.futures.html)副标题 是“Launching parallel tasks”(执行并行任务)。这个模块实现的是真正 的并行计算&…

使用concurrent.futures模块启动进程

concurrent.futures 模块的文档
(https://docs.python.org/3/library/concurrent.futures.html)副标题
是“Launching parallel tasks”(执行并行任务)。这个模块实现的是真正
的并行计算,因为它使用 ProcessPoolExecutor 类把工作分配给多个
Python 进程处理。因此,如果需要做 CPU 密集型处理,使用这个模块
能绕开 GIL,利用所有可用的 CPU 核心。

ProcessPoolExecutor 和 ThreadPoolExecutor 类都实现了通用的
Executor 接口,因此使用 concurrent.futures 模块能特别轻松地把
基于线程的方案转成基于进程的方案。

下载国旗的示例或其他 I/O 密集型作业使用 ProcessPoolExecutor 类
得不到任何好处。这一点易于验证,只需把示例 17-3 中下面这几行:

def download_many(cc_list):workers = min(MAX_WORKERS, len(cc_list))with futures.ThreadPoolExecutor(workers) as executor:

改成:

def download_many(cc_list):with futures.ProcessPoolExecutor() as executor:

对简单的用途来说,这两个实现 Executor 接口的类唯一值得注意的区
别是,ThreadPoolExecutor.__init__ 方法需要 max_workers 参
数,指定线程池中线程的数量。在 ProcessPoolExecutor 类中,那个
参数是可选的,而且大多数情况下不使用——默认值是
os.cpu_count() 函数返回的 CPU 数量。这样处理说得通,因为对
CPU 密集型的处理来说,不可能要求使用超过 CPU 数量的职程。而对
I/O 密集型处理来说,可以在一个 ThreadPoolExecutor 实例中使用 10个、100 个或 1000 个线程;最佳线程数取决于做的是什么事,以及可
用内存有多少,因此要仔细测试才能找到最佳的线程数。

经过几次测试,我发现使用 ProcessPoolExecutor 实例下载 20 面国
旗的时间增加到了 1.8 秒,而原来使用 ThreadPoolExecutor 的版本是
1.4 秒。主要原因可能是,我的电脑用的是四核 CPU,因此限制只能有
4 个并发下载,而使用线程池的版本有 20 个工作的线程。

ProcessPoolExecutor 的价值体现在 CPU 密集型作业上。我用两个
CPU 密集型脚本做了一些性能测试。

arcfour_futures.py
这个脚本(代码清单参见示例 A-7)纯粹使用 Python 实现 RC4 算
法。我加密并解密了 12 个字节数组,大小从 149KB 到 384KB 不等。

sha_futures.py
这个脚本(代码清单参见示例 A-9)使用标准库中的 hashlib 模块
(使用 OpenSSL 库实现)实现 SHA-256 算法。我计算了 12 个 1MB 字
节数组的 SHA-256 散列值。

这两个脚本除了显示汇总结果之外,没有使用 I/O。构建和处理数据的
过程都在内存中完成,因此 I/O 对执行时间没有影响。

我运行了 64 次 RC4 示例,48 次 SHA 示例,平均时间如表 17-1 所示。
统计的时间中包含派生工作进程的时间。

表17-1:在配有Intel Core i7 2.7 GHz四核CPU的设备中,使用Python
3.4运行RC4和SHA示例,分别使用1~4个职程得到的时间和提速倍数可以看出,对加密算法来说,使用 ProcessPoolExecutor 类派生 4 个
工作的进程后(如果有 4 个 CPU 核心的话),性能可以提高两倍。

对那个纯粹使用 Python 实现的 RC4 示例来说,如果使用 PyPy 和 4 个职
程,与使用 CPython 和 4 个职程相比,速度能提高 3.8 倍。以表 17-1 中
使用 CPython 和一个职程的运行时间为基准,速度提升了 7.8 倍。

如果使用 Python 处理 CPU 密集型工作,应该试试
PyPy(http://pypy.org)。使用 PyPy 运行 arcfour_futures.py 脚本,速
度快了 3.8~5.1 倍;具体的倍数由职程的数量决定。我测试时使用
的是 PyPy 2.4.0,这一版与 Python 3.2.5 兼容,因此标准库中有
concurrent.futures 模块。

下面通过一个演示程序来研究线程池的行为。这个程序会创建一个包含
3 个职程的线程池,运行 5 个可调用的对象,输出带有时间戳的消息。

http://www.dtcms.com/a/537527.html

相关文章:

  • 合合信息与上海交通大学开展课题合作研究,共探智能文档图像处理前沿技术
  • 罗湖商城网站设计价格网站系统分析
  • 沈阳网站建设蓝顶网络wordpress怎么让手机端好看
  • Java---StringBuilder
  • 大航母网站建设怎么样防制网站怎么做
  • app分发平台哪个好点?手机app应用内测分发平台支持负载均衡的重要性
  • 华为ACT三步走”实施路径,以推动行业智能化落地
  • 深度解析Weights Biases:让AI实验管理变得如此简单
  • 国内模板建站公司爱网恋的男生
  • 网站优化预算表白网页生成器下载
  • 广州石井做网站建设银行怎么加入信用网站
  • 网站开发项目个人总结wordpress建图片网站
  • Spring Boot3零基础教程,swagger生成接口文档,笔记72
  • 做网站的登陆功能互联网信息服务
  • 平度市城乡建设局网站搜索引擎营销的方式
  • asp网站建设实例花网站广州住房和城乡建设厅网站
  • 实时视频接入技术解析
  • 做优化的网站电话wordpress 5.0.2 发布失败
  • 商城建设公司湖南好搜公司seo
  • 在 Windows系统下将 YOLOv5 模型导出为 ONNX 文件
  • 数字化利器,扔掉getdata吧
  • 个人网站建设价格表wordpress post class
  • 做网站写代码好还是模板c 网站开发视频教程
  • 粉末涂料 技术支持 东莞网站建设建设网站困难的解决办法
  • 网站开发工程师岗位说明书移动网站建设cnfg
  • linxu下安装纯cpu模式的pytorch以及国内源安装方法
  • C++ 常见代码异味(Code Smells)
  • 手写线程池第2弹:并发与并行深度解析:从CPU原理到高并发系统设计的核心技术
  • 国产三维CAD实现复杂实体快速转换钣金 | 中望3D 2026亮点速递(9)
  • 免费网站建设专业的公司软件设计师教程