【发布时间】: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_limit 和soft_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 似乎不支持任何超时,即使是硬超时。
【问题讨论】: