7

tqdm并且dask都是用于 python 迭代的惊人包。在tqdm实现所需进度条的同时,dask实现了多线程平台,它们都可以使迭代过程不那么令人沮丧。然而 - 我很难将它们结合在一起。

例如,下面的代码实现了一个延迟执行dask,带有tqdm.trange进度条。问题是,由于delayed执行速度很快,进度条会立即结束,而真正的计算时间工作是在compute零件期间完成的。

from dask import delayed,compute
from tqdm import trange
from time import sleep

ct = time()
result= []

def fun(x):
    sleep(x)
    return x

for i in trange(10):
    result.append(delayed(fun)(i))

print compute(result)

如何将进度条附加到compute命令中的实际执行?

4

2 回答 2

13

考虑 Dask 的进度条

from dask.diagnostics import ProgressBar

with ProgressBar():
    compute(result)

建立自己的诊断

您可以使用此插件架构在每个任务结束时获取信号。 http://dask.pydata.org/en/latest/diagnostics.html

这是一个人这样做的例子:https ://github.com/tqdm/tqdm/issues/278

于 2017-06-11T12:57:02.270 回答
2

基于 :

桌面集成

from tqdm.dask import TqdmCallback

with TqdmCallback(desc="compute"):
    ...
    arr.compute()

# or use callback globally
cb = TqdmCallback(desc="global")
cb.register()
arr.compute()

应用于问题中的代码:

from dask import delayed,compute
from tqdm.auto import tqdm
# from tqdm import trange
from time import sleep

from tqdm.dask import TqdmCallback

# ct = time()
result= []

def fun(x):
    sleep(x)
    return x

for i in tqdm(range(10)):
    result.append(delayed(fun)(i))

with TqdmCallback(desc="compute"):
    print(compute(result))

jupyter 中的输出截图: 在此处输入图像描述

于 2021-11-27T00:01:29.097 回答