芹菜的@shared_task不适用于soft_time_limit

时间:2019-05-31 21:47:09

标签: python celery gevent

下面是一些简单的代码:

@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))

这是设置了shared_tasktime_limit的{​​{1}},所以我希望soft_time_limit在5秒钟后打印(以及Here异常信息)然后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'> 工作程序。

UPD#1::问题似乎出在gevent池中(如果我删除了gevent,一切运行正常)。

UPD#2: --pool=gevent池似乎不支持任何超时,即使是硬超时也是如此。

1 个答案:

答案 0 :(得分:0)

this拉取请求中确实提到了gevent池的问题。

可以认为问题已经结束。