Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 芹菜任务超时/windows的时间限制?_Python_Windows_Signals_Celery - Fatal编程技术网

Python 芹菜任务超时/windows的时间限制?

Python 芹菜任务超时/windows的时间限制?,python,windows,signals,celery,Python,Windows,Signals,Celery,我有一个用Flask编写的web应用程序,目前正在Windows上的IIS上运行(不要问…) 我正在使用芹菜来处理一些异步处理(访问速度较慢的数据库并生成报告) 但是,在尝试设置一些错误处理行为时,我在 “时间限制目前不适用于不支持SIGUSR1信号的Windows和其他平台。” 由于数据库可能会变得非常慢,我真的希望能够为我的任务指定一个超时行为,并让它们稍后在数据库可能没有这样的任务时重试。由于各种原因,该应用程序必须从Windows提供服务,是否有解决方法 非常感谢您的帮助。芹菜中似乎没有

我有一个用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