【问题标题】:Using Dask in Python to run function in parallel在 Python 中使用 Dask 并行运行函数
【发布时间】:2019-11-02 03:28:41
【问题描述】:

我正在尝试使用 Dask.delayed 来并行计算一个函数。 函数 BL.BLSN 有 1 个参数,它是一个字符串。

runs=['forcing.dat','forcing.dat','forcing.dat','forcing.dat','forcing.dat','forcing.dat']
dfs = [delayed(BL.BLSN)(fn) for fn in runs]

当我打印 dfs 时,我会得到一个延迟对象的列表。这是我所期待的。

[延迟('BLSN-630cb6bf-7104-4d41-b5fb-544116fec7ed'), 延迟('BLSN-150a5d45-073a-48af-af03-6e85f809617c'), 延迟('BLSN-484e7d71-af09-4a1f-be28-42358ef745e9'), 延迟('BLSN-2f2f2cc1-76bc-4c29-839d-091255556f35'), 延迟('BLSN-8aae0a06-d607-4a98-89a7-cfd2c877bf11'), 延迟('BLSN-f0131a69-2bfd-4153-94c1-2d3ef4973772')

]

但是,当我尝试时:

dfs.compute()

我明白了:

AttributeError: 'list' object has no attribute 'compute'

让计算对列表中的每个对象进行操作的最佳方法是什么?

【问题讨论】:

  • 您有一个延迟对象列表,因为您使用的是列表推导。致电compute 或查看@mdurant 的回答
  • 如果你按顺序调用compute(),你会等待每个结果,不会遇到任何并行性

标签: python parallel-processing dask


【解决方案1】:

你想要compute的函数形式而不是方法:

import dask
dask.compute(*dfs)

这将并行运行(带有通常的警告),如果任务共享依赖项,它们将被智能共享。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 2018-11-14
    • 1970-01-01
    • 2017-12-29
    相关资源
    最近更新 更多