簡體   English   中英

如何推遲 Celery 任務的執行?

[英]How can I defer the execution of Celery tasks?

我有一個小腳本,可以將任務排入隊列以進行處理。 此腳本進行大量數據庫查詢以獲取應入隊的項目。 我面臨的問題是 celery 工作人員在腳本排隊后立即開始接收任務。 這是正確的,也是 celery 應該工作的方式,但這通常會導致我的腳本和 celery 工作人員之間出現僵局。

有沒有辦法可以將腳本中的所有任務排入隊列,但將執行延遲到腳本完成或固定時間延遲?

我在 celery 或 django-celery 的文檔中找不到這個。 這可能嗎?

目前作為一個快速修復,我想將所有要處理的項目添加到列表中,當我的腳本執行完所有查詢時,我可以簡單地遍歷列表並將任務排入隊列。 也許這可以解決問題,但是當您有數千個項目要排隊時,這可能是一個壞主意。

我認為您正在嘗試避免自己腳本的競爭條件,而不是要求延遲任務運行的方法。

然后您可以創建一個任務,並在該任務中使用 .apply() 而不是 .apply_async() 或 .delay() 調用您的每個任務。 以便這些任務依次運行

要定義任務執行的延遲,請使用apply_async()和以下格式的倒計時選項:

from datetime import timedelta
#Delay for 10 seconds
T.apply_async(args=[arg1, arg2], countdown = 10)
#Delay for 10 days 
T.apply_async(args=[arg1, arg2], countdown = timedelta(days=10))

通過使用timedelta ,可以為任務執行定義更復雜的延遲。 請注意, delay()是另一個調用 API,但不支持延遲倒計時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM