【问题标题】:Celery chains: Is it necessary to wait before getting the results?芹菜链:是否需要等待才能得到结果?
【发布时间】:2018-08-13 14:10:10
【问题描述】:
所以,我在 Python 3 中有一个 celery worker 运行的任务链。目前,我使用以下代码来获取并打印链的最终结果:
while not result.ready():
pass
print(result.get())
我已经在有和没有while-loop的情况下运行了代码,似乎while-loop是多余的。
我的问题是:“有必要有那个while-loop吗?”
【问题讨论】:
标签:
python-3.x
celery
worker
celery-task
【解决方案1】:
如果冗余,您的意思是代码在没有 while 循环的情况下可以正常工作,那么我敢说循环不是必需的。但是,如果您因为尝试打印尚不存在的内容而在没有循环的情况下抛出错误,那么您应该保留它。不过,这可能是个问题,因为空的 while 循环意味着您检查同一个变量的速度与您的计算机物理处理它的速度一样快,这往往会占用您的 CPU。我推荐如下内容:
import time
t = 1 #The number of seconds you want to wait between checking if the result is ready
while not result.ready():
time.sleep(t)
print(result.get())
您可以将t 设置为任何有意义的值。如果您正在运行的任务需要几个小时,可以将其设置为 60,您将在一分钟内得到结果。如果你想要更快的结果,你可以让间隔更小。这将防止程序拖累计算机的其余部分。但是,如果你不介意你的粉丝吹嘘,并且你绝对需要知道结果准备好的那一刻,请忽略以上所有内容并保持你的代码原样:)