Dask 不显示进度条

Dask Not Showing Progress Bar

当我 运行 这个我除了看到一个 progress bar,但我没有。

from math import factorial

from dask.diagnostics import ProgressBar
from dask.distributed import Client


def dask_progress():
    client = Client()
    print(client)
    m = client.map(factorial, range(10))
    with ProgressBar():
        print(client.gather(m))


if __name__ == "__main__":
    dask_progress()

这是输出。

<Client: 'tcp://127.0.0.1:65468' processes=4 threads=8, memory=17.18 GB>
[1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880]

我也看到了同样的事情

from math import factorial

from dask.distributed import Client, progress


def dask_progress():
    client = Client()
    print(client)
    m = client.map(factorial, range(10))
    progress(m)
    print(client.gather(m))


if __name__ == "__main__":
    dask_progress()

我需要做什么才能看到进度条?

不同的调度器有不同的进度条。

https://docs.dask.org/en/latest/understanding-performance.html

ProgressBar(本地)与进度(分布式)

正如第一个答案中所暗示的,您的第一个代码块不会显示进度条,因为您使用的是分布式调度程序。 ProgressBar 用于本地调度程序。参见 https://docs.dask.org/en/latest/diagnostics-local.html

终端与笔记本

当我在我的终端中 运行 它作为 Python 脚本时,你的第二个代码块没有为我重现错误。这是一个非常快的操作,所以进度条只显示一瞬间;但它确实出现了。

然而,当我 运行 你在 Jupyter notebook 中的第二个代码块时, ProgressBar 确实没有出现。如果你在笔记本上工作,你可以这样做:

m = client.map(factorial, range(1000))
progress(m)

Dask 文档

This section of the Dask docs 可能与此处相关:“在笔记本中,进度的输出必须是单元格中的最后一条语句。通常,这意味着在单元格末尾调用进度。”我怀疑将 progress 调用包装在 if __name__ == "__main__": 中会在幕后引起问题。