重新分配后芹菜任务ID是否会发生变化

时间:2017-01-20 07:24:06

标签: django rabbitmq celery

我有一个Django模型,其中有一个名为celery_task_id的列。我使用RabbitMQ作为经纪人。有一个名为test_celery的芹菜函数,它将模型对象作为参数。现在我有以下几行代码来创建一个芹菜任务。

def create_celery_task():
    celery_task_id = test_celery.apply_async((model_obj,), eta='Future Datetime Object')
    model_obj.celery_task_id = celery_task_id
    model_obj.save()
    ----
    ----

现在在celery函数内部,我正在验证任务ID是否与存储在DB中的任务ID相同。

@app.task
def test_celery(model_obj):
    if model_obj.celery_task_id == test_celery.request.id:
        ## Do something

我的问题是在很多情况下,我可以看到日志中正在接收和成功的任务,但没有在if条件中执行代码。

芹菜任务ID可能在重新分发后发生变化。或者还有其他原因。

1 个答案:

答案 0 :(得分:0)

其中一个建议是不将Database / ORM对象传递给Celery任务,因为它可能包含陈旧数据。尝试将任务重写为:

@app.task
def test_celery(model_obj_id):
    model_obj = YourModel.objects.get(id=model_obj_id)
    if model_obj:
        if model_obj.celery_task_id == test_celery.request.id:
            ## Do something