【问题标题】:Celery's @shared_task not working with soft_time_limitCelery 的 @shared_task 不适用于 soft_time_limit
【发布时间】:2019-10-17 12:20:22
【问题描述】:

下面是一些简单的代码:

@shared_task(time_limit=10, soft_time_limit=5)
def check_action():
    try:
        __import__("time").sleep(100)
    except celery.exceptions.SoftTimeLimitExceeded as e:
        print("Here", e, type(e))
    except BaseException as e:
        print("There", e, type(e))

这是一个带有time_limitsoft_time_limit 设置的shared_task,所以我希望Here 在5 秒后打印(连同SoftTimeLimitExceeded 异常信息),然后There 打印一些硬超时异常。

相反,它根本不会引发SoftTimeLimitExceeded,只是调用了硬时间限制,完整输出是:

celery_1               | [2019-05-31 21:36:36,709: WARNING/MainProcess] There
celery_1               | [2019-05-31 21:36:36,710: WARNING/MainProcess] 10 seconds
celery_1               | [2019-05-31 21:36:36,710: WARNING/MainProcess] <class 'gevent.timeout.Timeout'>

从日志中可以看出,如果有任何帮助,我会使用 gevent workers。

UPD #1:问题似乎与gevent 池有关(我是否删除了--pool=gevent,一切正常)。

UPD #2: eventlet pool 似乎不支持任何超时,即使是硬超时。

【问题讨论】:

    标签: python celery gevent


    【解决方案1】:

    这确实是gevent 池的问题,正如this 拉取请求中所述。

    可以认为问题已结束。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-15
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 2013-06-19
      • 1970-01-01
      • 2017-09-28
      • 2014-02-15
      相关资源
      最近更新 更多