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