【问题标题】:How to set chunk size when using pathos ProcessingPool's map?使用 pathos ProcessingPool 的地图时如何设置块大小?
【发布时间】:2019-08-31 20:50:18
【问题描述】:

我在使用 Pathos 的 ProcessingPool.map() 函数时遇到了低效的并行化:在处理结束时,一个运行缓慢的工作人员按顺序处理列表中的最后一个任务,而其他工作人员则处于空闲状态。我认为这是由于任务列表的“分块”。

当使用 Python 自己的 multiprocessing.Pool 时,我可以通过在调用 map 时强制 chunksize=1 来解决这个问题。但是,Pathos 不支持此论点,源代码表明这可能是开发人员的疏忽或待办事项:

return _pool.map(star(f), zip(*args)) # chunksize

(来自 Pathos 的 multiprocessing.py,第 137 行)

我想保留 Pathos,因为它能够与 lamdbas 一起工作。

有什么方法可以在 Pathos 中运行块大小?是否有使用 Patho 其他记录不充分的池实现之一的解决方法?

【问题讨论】:

    标签: python multiprocessing pathos


    【解决方案1】:

    我是pathos 开发人员。这不是疏忽……在使用pathos.pools.ProcessingPool 时不能使用chunksize。这样做的原因是我想让map 函数与python 的map... 具有相同的接口,并且要做到这一点,基于multiprocessing 实现,我要么必须选择使@ 987654327@ 一个关键字,或者允许*args**kwds。所以我选择后者。

    如果要使用chunksize,有_ProcessPool,它保留了原来的multiprocessing.Pool接口,但增加了序列化。

    >>> import pathos
    >>> p = pathos.pools._ProcessPool() 
    >>> p.map(lambda x:x*x, range(4), chunksize=10)
    [0, 1, 4, 9]
    >>> 
    

    很抱歉,您觉得缺少文档。该代码主要由来自 python 标准库的multiprocessing 的一个分支组成......并且我没有更改已复制该功能的文档。比如这里我回收的是 STL 文档,因为功能是一样的:

    >>> p = pathos.pools._ProcessPool()
    >>> print(p.map.__doc__)
    
            Equivalent of `map()` builtin
    
    >>> p = multiprocessing.Pool()
    >>> print(p.map.__doc__)
    
            Equivalent of `map()` builtin
    >>>    
    

    ...在我修改了功能的情况下,我确实编写了新文档:

    >>> p = pathos.pools.ProcessPool()
    >>> print(p.map.__doc__)
    run a batch of jobs with a blocking and ordered map
    
    Returns a list of results of applying the function f to the items of
    the argument sequence(s). If more than one sequence is given, the
    function is called with an argument list consisting of the corresponding
    item of each sequence.
    
    >>> 
    

    诚然,文档可能会更好。特别是来自 STL 的文档可以改进。请随时在 GitHub 上添加票证,或者更好的是 PR 以扩展文档。

    【讨论】:

    • 感谢您提供如此详细且令人难以置信的快速答案,它有效!我认为chunksize 的提示会大大改进文档。 pathos.readthedocs.io 上没有提到它(至少没有一个通过搜索重新调整)。甚至是Pool 中的map_with_chunksize 方法,或者构造函数中的chunk_size 参数?我了解您在这里的设计选择,但对于我的用例而言,该参数非常重要。
    • 关于文档的观点。实际上,我对文档的决定是完全重用 STL 中的内容,除非我编写了新功能(老实说,这并不算太多)。我可能在十年前写了这些文档,但他们可以重新访问。我将添加一个 GitHub 票以改进文档。
    猜你喜欢
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 2013-03-15
    • 2011-08-17
    • 1970-01-01
    • 2021-11-15
    • 2011-02-05
    • 1970-01-01
    相关资源
    最近更新 更多