哪些因素决定了chunksize方法的最佳参数multiprocessing.Pool.map()?该.map()方法似乎使用任意启发式作为其默认的chunksize(如下所述); 是什么推动了这种选择,是否有基于某些特定情况/设置的更周到的方法?
示例 - 说我是:
iterable到.map()拥有约1500万个元素的元素;processes = os.cpu_count()内multiprocessing.Pool().我天真的想法是给每24个工人一个同样大小的块,即15_000_000 / 24625,000.大块应该在充分利用所有工人的同时减少营业额/管理费用.但似乎缺少给每个工人提供大批量的一些潜在缺点.这是不完整的图片,我错过了什么?
我的部分问题源于if chunksize=None:both .map()和.starmap()call 的默认逻辑,.map_async()如下所示:
def _map_async(self, func, iterable, mapper, chunksize=None, callback=None,
error_callback=None):
# ... (materialize `iterable` to list if it's an iterator)
if chunksize is None:
chunksize, extra = divmod(len(iterable), len(self._pool) * 4) # ????
if extra:
chunksize += 1
if len(iterable) == 0:
chunksize = …Run Code Online (Sandbox Code Playgroud) python parallel-processing multiprocessing python-3.x python-multiprocessing
我正在使用Python的DEAP pacakge,我希望多核我的代码,我使用http://deap.gel.ulaval.ca/doc/dev/tutorials/distribution.html上的教程成功地使用多处理来完成它.
我的问题如下:使用8个核心,理论上我获得了多少加速?我问的原因是因为我想决定我可以在与单核版本相同的时间内运行多少个人和几代人.我的代码用来运行大约200秒,有8个内核,现在需要大约0.5秒(这是400倍的加速).我可以假设任何事情都会加速400倍吗?我知道这很复杂,但非常感谢你的帮助.
一般来说,如果有人可以提供帮助,我想了解多重化如何改变计算流程.它是否只是针对每一代在不同核心上对每个人的评估进行映射?还是它并行运行几代?如果您知道我可以阅读的任何文档,请告诉我.
我没有提供代码示例,因为它似乎没有必要,因为这是一个非常高级的问题.