[英]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.