0
celery_task_id
という列を持つDjangoモデルがあります。私はRabbitMQ
をブローカーとして使用しています。モデルオブジェクトをパラメータとして取るセロリ関数test_celery
があります。今私はセロリのタスクを作成する次のコード行を持っています。再配布後にセロリのタスクIDが変更される
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()
----
----
セロリ関数の内部で、タスクIDがDBに格納されているものと同じかどうかを確認しています。
@app.task
def test_celery(model_obj):
if model_obj.celery_task_id == test_celery.request.id:
## Do something
私の問題は、私はタスクが受信され、ログに成功したが、もし条件の内のコードを実行していないされて見ることができる例が多いです。
再配布後にセロリのタスクIDが変更される可能性はありますか?または、他の理由があるかどうか。
しかし、それでも質問には答えません。 rabbitmq同期プロセス中、または再配布中に 'test_celery.request.id'が変更されますか? – Pattu
IDは変わっていないと思います。私の推測では、条件の左側が機能していない、つまりmodel_obj.celery_task_idはオブジェクトをタスクに提供するためです。あなたの推測では、同期プロセス中にtest_celery.request.idが変化しているため、問題が発生しています。 –