我有任務:recursive_task將安排5秒後執行相同的任務,但如果由於某種原因,此任務崩潰需要重新運行。 我幾乎抓住每一個場景,但你永遠不知道未來會發生什麼。如果任務未運行超過10分鐘,如何重新計劃任務?
我首先做了一個重複的任務:manage_tasks,它檢查recursive_task的狀態,並檢查它是否長時間沒有運行,並且它是否成功完成,但這並不正確。那麼你如何解決這個問題呢?
我有任務:recursive_task將安排5秒後執行相同的任務,但如果由於某種原因,此任務崩潰需要重新運行。 我幾乎抓住每一個場景,但你永遠不知道未來會發生什麼。如果任務未運行超過10分鐘,如何重新計劃任務?
我首先做了一個重複的任務:manage_tasks,它檢查recursive_task的狀態,並檢查它是否長時間沒有運行,並且它是否成功完成,但這並不正確。那麼你如何解決這個問題呢?
我可以建議看看蟒蛇信號:
http://docs.python.org/library/signal.html
import signal
# Set the signal handler and an alarm
signal.signal(signal.SIGALRM, handler)
signal.alarm(900) # 15 miutes
# some_function()
signal.alarm(0) # Disable the alarm
其中:
def handler(signum, frame):
# do something
sys.exit(1)
有了信號,您可以設置處理的任何時間後執行, 你要。然後,這是通過處理程序重新運行腳本的直接方式。
嘗試ack_late設置CELERY_ACKS_LATE,它將在任務執行完成後確認任務消息。有了這個,您可以更輕鬆地重新運行您的任務。
我只是愛甚至沒有一句話downvoting ...... – Gandi
不是我,但我看了你的答案,它不是我需要的這個問題。最後,我通過以下方式解決了這個問題:在任務開始時,向緩存「running」添加一個字符串,過期時間= 5分鐘,我有一個cron作業,每隔一小時檢查緩存中是否有該項目這些任務在每次啓動時放置在那裏,所以如果啓動時間超過5分鐘,緩存中就沒有任何項目,我們再次啓動任務。 –