簡體   English   中英

Windows的芹菜任務超時/時間限制?

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

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