Я только что узнал о параметре конфигурации CELERYD_PREFETCH_MULTIPLIER
(docs). По умолчанию 4, но (я считаю), я хочу, чтобы предварительная выборка была как можно более низкой. Я установил его в 1 сейчас, что достаточно близко к тому, что я ищу, но все же некоторые вещи я не понимаю:
-
Почему эта предварительная выборка хорошая идея? Я действительно не вижу причины для этого, если между очередью сообщений и рабочими не существует много задержек (в моем случае они в настоящее время работают на одном и том же хосте, а в худшем случае могут запускаться на разных хостах в одних и тех же данных центр). В документации упоминаются только недостатки, но не объясняется, какие преимущества существуют.
-
Многие люди, похоже, задают это значение 0, ожидая, что смогут отключить предварительную выборку (разумное предположение, на мой взгляд). Однако 0 означает неограниченную предварительную выборку. Зачем кому-либо когда-либо требовалась неограниченная предварительная выборка, не полностью ли исключает concurrency/асинхронность, в которой вы ввели очередь задач?
-
Почему предварительная выборка не может быть отключена? Возможно, неплохо было бы заставить производительность отключить его в большинстве случаев, но есть ли техническая причина, по которой это невозможно? Или это просто не реализовано?
-
Иногда этот параметр подключается к
CELERY_ACKS_LATE
. Например. Роджер Ху пишет "[...] часто, что [пользователи] действительно хотят, чтобы у рабочего оставалось столько задач, сколько есть дочерние процессы. Но это невозможно без включения поздних подтверждений [...]" Я не понимаю, как эти два параметра связаны и почему одно невозможно без другого. Еще одно упоминание о связи можно найти здесь. Может кто-нибудь объяснить, почему эти два параметра связаны?