簡體   English   中英

如何有條件地執行celery任務python

[英]how to execute celery tasks conditionally python

我是芹菜的新手。 我有一個芹菜任務,需要在滿足條件時執行。 否則幾分鍾后重試。 從下面的代碼中,我堅持如何在else條件下重試相同的任務? 感謝您的幫助。

@app.task(bind=True,soft_time_limit=4 * 3600)
def task_message_queue(id, name=None, tid=None, src=None, dest=None, queue="MessageQueue"):
   ThreadLocalStore().set_data({"id": id, "tid": tid, "name": name,"src": src, "dest":dest})
   num_files = os.popen("find %s -type f | wc -l" % dest).read().strip().split('\n')[0]
   if num_files < 20:
     #Move files from src to destination
   else:
     #wait for 2 minutes and retry the task

您可以再次觸發任務,而不是依賴重試。

from celery.task import task
@app.task(bind=True,soft_time_limit=4 * 3600)
def task_message_queue(self, id, name=None, tid=None, src=None, dest=None, queue="MessageQueue"):
   ThreadLocalStore().set_data({"id": id, "tid": tid, "name": name,"src": src, "dest":dest})
   num_files = os.popen("find %s -type f | wc -l" % dest).read().strip().split('\n')[0]

   if num_files < 20:
       #Move files from src to destination
   else:
       # Trigger the task again in 120 seconds.
       task_message_queue.apply_async(countdown=120)

您必須調用retry以使芹菜重試該任務,您可以設置倒計時,以便芹菜將等待那么長時間並重試該任務。 以下是從官方芹菜文檔借來的代碼。 根據您的需要和self.retry修改@task裝飾器

from celery.task import task
@app.task(bind=True,soft_time_limit=4 * 3600)
def task_message_queue(self, id, name=None, tid=None, src=None, dest=None, queue="MessageQueue"):
   ThreadLocalStore().set_data({"id": id, "tid": tid, "name": name,"src": src, "dest":dest})
   num_files = os.popen("find %s -type f | wc -l" % dest).read().strip().split('\n')[0]
   try:
       if num_files < 20:
           #Move files from src to destination
       else:
           raise SOME_EXCEPTION
           #wait for 2 minutes and retry the task
   except SOME_EXCEPTION as exc:
       self.retry(exc=exc, countdown=TIME_TO_WAIT_BEFORE_RETRY)

暫無
暫無

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

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