You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask中Celery特定任务自定义超时时间的设置方法

调整Celery特定任务的超时时间(Flask场景)

要把这个特定任务的超时从默认30分钟改成1小时,有两种实用的方式,你可以根据需求选择:

方式一:发送任务时动态指定超时

直接在send_task的options参数里合并默认重试策略和自定义超时配置,既保留原有重试逻辑,又覆盖超时时间:

@async_runner.app.task(name='task_name')
def async_task():
    # 合并默认重试策略与自定义超时设置
    custom_task_options = {
        **async_runner.DEFAULT_RETRY_POLICY,
        'time_limit': 3600,  # 硬超时:1小时(单位为秒)
        'soft_time_limit': 3600  # 软超时:1小时,用于任务优雅退出,可选
    }
    async_runner.send_task(
        task_fn=task_processing,
        queue='queue_name',
        options=custom_task_options
    )

这里给你区分下两个超时参数的作用:

  • time_limit:硬超时,一旦任务运行超过这个时间,Celery Worker会直接强制终止任务进程,适合不需要优雅收尾的场景。
  • soft_time_limit:软超时,到达时间后会给任务发送SoftTimeLimitExceeded异常,你可以在task_processing里捕获这个异常,做一些清理工作(比如关闭数据库连接、保存中间状态)。如果不需要软超时,只设置time_limit即可。

方式二:给任务本身设置默认超时

如果希望task_processing这个任务无论在哪里调用,默认都是1小时超时,那可以在定义任务时直接通过装饰器参数指定:

@async_runner.app.task(
    name='task_processing',
    time_limit=3600,
    soft_time_limit=3600
)
def task_processing():
    # 你的任务处理逻辑
    pass

这种方式一劳永逸,之后所有调用这个任务的地方,除非在send_task里特意覆盖options,否则都会使用这个1小时的超时设置。

需要注意的是,在Flask+Celery的场景下,单个任务的超时设置优先级高于全局配置(比如CELERYD_TASK_TIME_LIMIT),所以上面两种方式都能正常生效。

内容的提问来源于stack exchange,提问作者Kishan Mehta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:15:49