@Shared_task из Celery не работает с soft_time_limit - PullRequest
0 голосов
/ 01 июня 2019

Вот простой код:

@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_task с настройками time_limit и soft_time_limit, поэтому я ожидаю, что через 100 секунд будет напечатано Here (вместе с * 1008).* информация об исключении), а затем 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 рабочих, если это поможет.

UPD # 1: проблемы, похоже, с gevent pool (если я удаляю --pool=gevent, все работает отлично).

UPD #2: eventlet пул, похоже, не поддерживает ни один тайм-аут, даже жесткий.

1 Ответ

0 голосов
/ 01 июня 2019

Это действительно проблема с gevent пулом, как упомянуто в этом пулл-запросе.

Вопрос можно считать закрытым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...