有没有办法跟踪和弦的进度,最好是在TQM条中
例如,如果我们采用the documentation exemple,我们将创建以下文件:
#proj/tasks.py
@app.task
def add(x, y):
return x + y
@app.task
def tsum(numbers):
return sum(numbers)
然后运行以下脚本:
from celery import chord
from proj.tasks import add, tsum
chord(add.s(i, i)
for i in range(100))(tsum.s()).get()
我们怎样才能追踪和弦的进展
理想情况下,我会设想类似this custom tqdm subclass for Dask的东西,但是我一直无法找到类似的解决方案
非常感谢任何帮助或暗示
所以我找到了解决办法
首先,chord()(回调)实际上并不会阻止脚本,只有.get()部分会阻止脚本。将所有任务发布到代理可能需要很长时间。幸运的是,有一种简单的方法可以通过信号跟踪发布过程。我们可以在发布开始之前创建进度条,并修改example handler from the documentation以更新它:
但是,这只适用于发布任务,因为this signal是在发送任务的信号中执行的。task_success信号在worker进程中执行,因此这个技巧只能在worker日志中使用(据我所知)
因此,为了在发布所有任务并恢复脚本后跟踪进度,我从app.control.inspect().stats()转到worker stats。这将返回一个包含各种统计信息的dict,其中包括已完成的任务。以下是我的实现:
最后,我认为可能有必要将give names添加到任务中,用于信号处理程序的过滤和stats()dict,因此不要忘记将此添加到任务中:
如果有人能找到更好的解决方案,请分享
相关问题 更多 >
编程相关推荐