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

与Python中的multiprocessing / pool.map无关的块大小?

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

与Python中的multiprocessing / pool.map无关的块大小?

Chunksize不会影响正在使用多少个内核,这由的

processes
参数设置
Pool
。Chunksize设置您传递给的可迭代项的数量,这些项在称为“任务”的
Pool.map
每个工作进程
中一次 分配
Pool
(以下图显示了Python 3.7.1)。

如果您设置

chunksize=1
,则只有在完成之前收到的工作后,工作流程才能在新任务中获得新项目。对于
chunksize >1
一个任务来说,一个工人一次获取整批物品,当它完成时,如果还有剩余,它将获得下一批。

chunksize=1
由于滴灌需要更多的进程间通信(IPC),因此可以在调度时灵活地逐一分配项目,同时降低总体吞吐量。

在我的游泳池的CHUNKSIZE算法的深入分析在这里,我定义了
工作单位 处理 一个 可迭代的项目 taskel
,以避免命名冲突字的“任务”的游泳池的使用。任务(作为工作单元)由任务组组成

chunksize


你会设定

chunksize=1
,如果你不能预测taskel多长时间需要完成,例如优化问题,在处理时间跨越taskels良莠不齐。此处滴灌可防止工人流程坐在一堆未接触的物品上,而在一个沉重的任务板上el缩时,可防止任务中的其他物品分配到闲置的工人流程中。

否则,如果所有任务组都需要相同的时间才能完成,则可以设置

chunksize=len(iterable) //processes
,以使任务仅在所有工作进程中分配一次。请注意,如果
len(iterable) / processes
有剩余,这将产生比进程(进程+
1)多的任务。这有可能严重影响您的总体计算时间。在先前链接的答案中了解有关此内容的更多信息。


仅供参考,这是源代码的一部分,

Pool
如果未设置,则内部计算块大小:

    # Python 3.6, line 378 in `multiprocessing.pool.py`    if chunksize is None:        chunksize, extra = divmod(len(iterable), len(self._pool) * 4)        if extra: chunksize += 1    if len(iterable) == 0:        chunksize = 0


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

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

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