我有一个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可能在重新分发后发生变化。或者还有其他原因。
答案 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