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