我不是Python专家,但是我正在尝试开发一些长期运行的基于Celery的任务,我可以访问他们的部分结果,而不是等待任务完成。
正如您在下面的代码中看到的,给定乘数,初始范围和最终范围, worker 创建一个大小为 final_range - initial_range + 1 的列表。< / p>
from celery import Celery
app = Celery('trackers', backend='amqp', broker='amqp://')
@app.task
def worker(value, initial_range, final_range):
if initial_range < final_range
list_values = []
for index in range(initial_frame, final_frame + 1):
list_values.append(value * index)
return list_values
else
return None
因此,我不想等待所有四个工作程序完成,而是希望在实际返回之前访问要返回的值( list_values )。
from trackers import worker
res_1 = worker.delay(3, 10, 10000000)
res_2 = worker.delay(5, 01, 20000000)
res_3 = worker.delay(7, 20, 50000000)
res_4 = worker.delay(9, 55, 99999999)
首先,有可能吗? 如果是这样,我必须进行哪些更改才能使其正常工作?
答案 0 :(得分:0)
您绝对需要使用SQL或Redis / Memcached等外部存储,因为在不同的服务器上可以执行不同的任务。
因此,在您的示例中,您应该将list_values存储在某个DB中,并在循环期间更新它。
答案 1 :(得分:0)
我建议您拆分每项任务中执行的工作。
如果您需要在列表中稍后计算值的第一个值,则可以通过link
参数链接任务。见http://docs.celeryproject.org/en/latest/userguide/canvas.html#callbacks