[英]Celery task timeout/time limit for windows?
我有一個用Flask編寫的Web應用程序,當前正在Windows的IIS上運行(不要問...)。
我正在使用Celery處理一些異步處理(訪問緩慢的數據庫並生成報告)。
但是,當嘗試設置一些錯誤處理行為時,我在docs中遇到了這個問題:
“時間限制目前在Windows和其他不支持SIGUSR1信號的平台上不起作用。”
由於數據庫會變得非常慢,因此我真的很希望能夠為我的任務指定一個超時行為,並在數據庫可能沒有那么任務時讓它們稍后重試。 鑒於出於各種原因,必須從Windows提供該應用程序,對此是否有任何解決方法?
非常感謝你的幫助。
如果確實需要設置任務超時,則可以使用子進程來實現,代碼如下
import json
from multiprocessing import Process
from celery import current_app
from celery.exceptions import SoftTimeLimitExceeded
soft_time_limit = 60
@current_app.task(name="task_name")
def task_worker(self, *args, **kwargs):
def on_failure():
pass
worker = Process(target=do_working, args=args, kwargs=kwargs, name='worker')
worker.daemon = True
worker.start()
worker.join(soft_time_limit)
while worker.is_alive():
worker.terminate()
raise SoftTimeLimitExceeded
return json.dumps(dict(message="ok"))
def do_working(*args, **kwargs):
pass # do something
在Celery中,似乎沒有任何內置的解決方法。 您能否將其直接編碼到您的任務中? 換句話說,在python代碼中,如果任務完成時間太長,引發異常並再次將作業重新提交到隊列中,則在開始任務時啟動計時器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.