访问Celery任务的部分结果

时间:2016-08-18 18:35:32

标签: python celery jobs

我不是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)

首先,有可能吗? 如果是这样,我必须进行哪些更改才能使其正常工作?

2 个答案:

答案 0 :(得分:0)

您绝对需要使用SQL或Redis / Memcached等外部存储,因为在不同的服务器上可以执行不同的任务。

因此,在您的示例中,您应该将list_values存储在某个DB中,并在循环期间更新它。

答案 1 :(得分:0)

我建议您拆分每项任务中执行的工作。

如果您需要在列表中稍后计算值的第一个值,则可以通过link参数链接任务。见http://docs.celeryproject.org/en/latest/userguide/canvas.html#callbacks