0
將相對長時間運行的任務委託給另一臺服務器上的芹菜工作人員,這些工作人員正在單獨運行。在Flask中成功提交後執行celery任務?
但是,結果被添加回關係數據庫(根據task_descr.id
作爲關鍵字更新表,見下文),工作人員使用ignore_result
。
任務從瓶的應用要求:
task = app.celery.send_task('tasks.mytask', [task_descr.id, attachments])
的問題是,被請求的任務,而交易尚未燒瓶上側封閉。這會導致競爭狀態,因爲有時候芹菜工作者會在Flask應用程序的事務結束之前完成任務。
成功事務後發送任務的正確方法是什麼?
還是應該在工作人員檢查task_descr.id
可用性,然後嘗試條件UPDATE
並重試該任務(這種感覺過於複雜)?
對Run function after a certain type of model is committed的回覆討論了類似的情況,但這裏任務發送是明確的,所以不需要在某些模型中偵聽更新/插入。