栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python 3中的Concurrent.futures与Multiprocessing

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python 3中的Concurrent.futures与Multiprocessing

我不会称其为

concurrent.futures
“高级”,它是一个 更简单的
接口,其工作原理几乎相同,无论您使用多个线程还是多个进程作为基础并行化ization头。

所以,像“简单的界面”的几乎所有情况下,大同小异的取舍都参与:它有一个浅的学习曲线,这在很大程度上只是因为有可用的要少得多 ,以 学习;
但是,由于它提供的选项较少,因此最终可能使您无法使用更丰富的界面而感到沮丧。

就与CPU绑定的任务而言,这还不够具体,以至于说不出什么意义。对于CPython下与CPU绑定的任务,您需要多个进程而不是多个线程才能获得加速的机会。但是,获得多少加速(如果有)取决于硬件,操作系统的详细信息,尤其取决于特定任务需要多少进程间通信。在幕后,所有进程间并行化头都依赖于相同的OS原语-
用于获得这些原语的高级API并不是底线速度的主要因素。

编辑:示例

这是您引用的文章中显示的最终代码,但是我添加了一个导入语句以使其正常工作:

from concurrent.futures import ProcessPoolExecutordef pool_factorizer_map(nums, nprocs):    # Let the executor divide the work among processes by using 'map'.    with ProcessPoolExecutor(max_workers=nprocs) as executor:        return {num:factors for num, factors in          zip(nums,   executor.map(factorize_naive, nums))}

这里使用的是完全一样的东西

multiprocessing

import multiprocessing as mpdef mp_factorizer_map(nums, nprocs):    with mp.Pool(nprocs) as pool:        return {num:factors for num, factors in          zip(nums,   pool.map(factorize_naive, nums))}

请注意,

multiprocessing.Pool
在Python 3.3中添加了使用对象作为上下文管理器的功能。

至于哪个更易于使用,它们本质上是相同的。

一个区别是

Pool
支持这样的事情,你可能不知道是多么容易的许多不同的方式 可以 是直到你攀上了学习曲线相当一路上扬。

同样,所有这些不同的方式都是优点和缺点。它们是优势,因为在某些情况下可能需要灵活性。它们之所以成为弱点,是因为“最好只有一种明显的方式”。

concurrent.futures
从长远来看,专案(如果可能)坚持下去的项目可能会更容易维护,这是因为在如何使用其最小的API方面缺乏免费的新颖性。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/651019.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号