#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
, ничего общего с демонизацией.