celery 系列:过期时间和时间限制(3)

1、过期时间

简单示例:

# tasks.pyfrom celery_app import app@app.task(expires=60)  # 设置任务过期时间为60秒def add(x, y):    return x + y

过期时间是什么?

起初我认为这个过期时间指的是任务运行超过expires就会停止,但是我测试中我发现任务并没有停止,而是持续运行。这时我就比较疑惑了,所以花了大量时间在网上查expires为什么没有生效。最后在stack overflow上看到一个回答或许可以解答我的疑惑,也能侧面说明我的expires为什么没有生效。

原文连接

意思是这样的,这个过期时间指的是 任务添加到任务队列到任务开始执行的时间段 ,如果这个时间段超过了设置的expires,那么任务将不会再执行。expires不会影响任务运行时。

ps:我没有去验证

2、时间限制

时间限制影响的才是任务运行时,当任务运行时间超过limit后停止或者触发错误,分为:

  1. hardtime_limit,单位秒,任务运行时间超过它会被终止。
  2. softsoft_time_limit,单位秒,任务运行时间超过它会raise SoftTimeLimitExceeded错误,捕捉这个错误可以做其他的操作。

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

但是很遗憾的是不论在哪里设置,我测试过程中它俩都没有生效过。 当然,也xx费了我好多时间查资料,最后在github看到几个回答。

原文地址


发表评论

评论列表,共 0 条评论

    暂无评论