【问题标题】:Setting Time Limit on specific task with celery用芹菜对特定任务设置时间限制
【发布时间】:2012-07-25 05:02:01
【问题描述】:

我在 Celery 中有一个任务,它在正常运行时可能会运行 10,000 秒。然而,我的所有其他任务都应该在不到一秒的时间内完成。如何在不更改短期运行任务的时间限制的情况下为故意长时间运行的任务设置时间限制?

【问题讨论】:

    标签: celery celeryd


    【解决方案1】:

    您可以在定义任务或调用时设置任务时间限制(hard 和/或soft)。

    from celery.exceptions import SoftTimeLimitExceeded
    
    @celery.task(time_limit=20)
    def mytask():
        try:
            return do_work()
        except SoftTimeLimitExceeded:
            cleanup_in_a_hurry()
    

    mytask.apply_async(args=[], kwargs={}, time_limit=30, soft_time_limit=10)
    

    【讨论】:

    • 请注意,apply_async 的 timeout/soft_timeout 参数仅在 celery 的开发版本中可用(master 分支,未来版本 3.1)
    • 您还可以使用以下命令为配置中的任务设置时间限制:CELERY_ANNOTATIONS = {'module.mytask': {'time_limit': 20.0}}
    • 对于 celery 版本 3.1.x,看起来 timeout/soft_timeout 的参数 apply_async 也已更改为 time_limit/soft_time_limit。这里介绍了相关的变化——github.com/celery/celery/commit/…
    • 添加到@sanchitarora 评论,来自 3.1.20 文档的链接 - docs.celeryproject.org/en/latest/userguide/…
    【解决方案2】:

    这是一个使用 soft_time_limit=10000

    的特定任务和 Celery 3.1.23 的装饰器示例
    @task(bind=True, default_retry_delay=30, max_retries=3, soft_time_limit=10000)
    def process_task(self, task_instance):
       """Task processing."""
            pass
    

    【讨论】:

    • 你也可以像@task(soft_time_limit=10, time_limit=15)一样将time_limit分配在一起
    猜你喜欢
    • 2014-07-24
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    • 2017-05-24
    • 2022-11-16
    • 2012-03-27
    • 2012-03-24
    • 2021-05-30
    相关资源
    最近更新 更多