在Python中使用dask将tqdm与延迟执行结合起来

Dim*_*old 5 python dask tqdm

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)
Run Code Online (Sandbox Code Playgroud)

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

MRo*_*lin 5

考虑一下Dask的进度条

from dask.diagnostics import ProgressBar

with ProgressBar():
    compute(result)
Run Code Online (Sandbox Code Playgroud)

建立自己的诊断

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

这是某人正是这样做的示例:https : //github.com/tqdm/tqdm/issues/278


eld*_*d-a 5

基于 :

桌面集成

from tqdm.dask import TqdmCallback

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

# or use callback globally
cb = TqdmCallback(desc="global")
cb.register()
arr.compute()
Run Code Online (Sandbox Code Playgroud)

应用于问题中的代码:

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))
Run Code Online (Sandbox Code Playgroud)

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