Являются ли процессы такими же, как параллелизм в django-post_office?

#django #concurrency #celery #multiple-processes #django-postoffice

#django #параллелизм #сельдерей #несколько процессов #django-postoffice

Вопрос:

Я использую django-post_office для отправки около 10 000 электронных писем в одной задаче каждое утро.

Это можно сделать с помощью функции send_queued(processes=1, log_level=None) в задаче сельдерея.

Я понимаю, что лучше всего запускать сельдерей с параллелизмом, например celery -A settings worker -l info --concurrency 6

Является processes ли флаг таким django-post_office же, как этот? Например, если я запускаю 6 параллельные процессы сельдерея, должен ли этот флаг также быть установлен как 6 ?

Если нет, в чем разница между ними?

Комментарии:

1. Вы заглядывали в код post_office?

Ответ №1:

send_queued(processes=6) разделит количество отправляемых электронных писем на 6 групп и будет обрабатывать каждую группу независимо в процессе с использованием multiprocess.Pool .

celery --concurrency 6 будет выполняться 6 процессов сельдерея. Каждый процесс сможет обрабатывать одну задачу за раз. Это не повлияет на то, как отправляются ваши электронные письма, потому send_queud() что одна инструкция выполняется в одном процессе сельдерея. Однако, если у вас было несколько задач celery (выполняемых send_queued() или нет), поставленных в очередь одновременно, эти задачи смогут выполняться одновременно (максимум 6) вместо ожидания завершения предыдущих задач перед запуском другой.

Другими словами process , аргумент of send_queued() и --concurrency аргумент of celery совершенно не связаны.

Комментарии:

1. Спасибо, не означает ли это, что каждый параллелизм сельдерея является демоническим процессом, как и send_queued() процессы? Я думал, что python не допускает дочерних демонических процессов?

2. Нет, send_queued() использует multiprocess.Pool , ничего общего с демонизацией.