Python 芹菜任务超时/windows的时间限制?
我有一个用Flask编写的web应用程序,目前正在Windows上的IIS上运行(不要问…) 我正在使用芹菜来处理一些异步处理(访问速度较慢的数据库并生成报告) 但是,在尝试设置一些错误处理行为时,我在 “时间限制目前不适用于不支持SIGUSR1信号的Windows和其他平台。” 由于数据库可能会变得非常慢,我真的希望能够为我的任务指定一个超时行为,并让它们稍后在数据库可能没有这样的任务时重试。由于各种原因,该应用程序必须从Windows提供服务,是否有解决方法Python 芹菜任务超时/windows的时间限制?,python,windows,signals,celery,Python,Windows,Signals,Celery,我有一个用Flask编写的web应用程序,目前正在Windows上的IIS上运行(不要问…) 我正在使用芹菜来处理一些异步处理(访问速度较慢的数据库并生成报告) 但是,在尝试设置一些错误处理行为时,我在 “时间限制目前不适用于不支持SIGUSR1信号的Windows和其他平台。” 由于数据库可能会变得非常慢,我真的希望能够为我的任务指定一个超时行为,并让它们稍后在数据库可能没有这样的任务时重试。由于各种原因,该应用程序必须从Windows提供服务,是否有解决方法 非常感谢您的帮助。芹菜中似乎没有
非常感谢您的帮助。芹菜中似乎没有任何内置的解决方法。您是否可以直接将其编码到您的任务中?换句话说,在python代码中,在开始任务时启动计时器,如果任务花费的时间太长,则引发异常,然后再次将作业提交到队列 如果确实需要设置任务超时,可以使用子进程来实现,代码如下
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