用芹菜对特定任务设置时间限制
Posted
技术标签:
【中文标题】用芹菜对特定任务设置时间限制【英文标题】:Setting Time Limit on specific task with celery 【发布时间】:2012-07-25 05:02:01 【问题描述】:我在 Celery 中有一个任务,它在正常运行时可能会运行 10,000 秒。然而,我的所有其他任务都应该在不到一秒的时间内完成。如何在不更改短期运行任务的时间限制的情况下为故意长时间运行的任务设置时间限制?
【问题讨论】:
【参考方案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
分配在一起以上是关于用芹菜对特定任务设置时间限制的主要内容,如果未能解决你的问题,请参考以下文章