Сельдерей против ProcessPoolExecutor/ThreadPoolExecutor

Я создаю веб-сервер django, который позволяет пользователю запускать некоторые «исполняемые файлы» на локальном компьютере и анализировать их вывод через веб-страницу.

Ранее я использовал очередь задач Celery для запуска «исполняемых файлов» в подобных ситуациях. Однако, прочитав о Python concurrent.futures, я начинаю задумываться, стоит ли мне использовать ThreadPoolExecutor или ProcessPoolExecutor (или ThreadPoolExecutor внутри ProcessPoolExecutor :D) вместо этого?

Погуглив, я смог найти только один соответствующий вопрос, сравнивающий Celery с Tornado, и это привело к использованию Tornado. один.

Итак, должен ли я использовать Celery или PoolExecutor для моего простого веб-сервера и почему?


person ostrokach    schedule 18.05.2016    source источник


Ответы (1)


Вам нужно использовать сельдерей, если:

  1. Вы хотите легко и независимо от вашего веб-сервера масштабироваться
  2. Вам нужен способ отслеживать выполнение задачи и повторять ее в случае сбоя.
  3. Вы хотите создать более сложные шаблоны выполнения задач (например, связать их в цепочку)

В дополнение к этому есть очень зрелая библиотека с сторонними проектами, которая поможет вам также в части представления пользовательского интерфейса, взгляните на Jobtastic. .

Если вам не нужен какой-либо из перечисленных пунктов, и вам просто нужно выполнить эту задачу, не заботясь о статусе и без особых потребностей в масштабируемости, просто сделайте ее простой.

Об использовании ThreadPoolExecutor или ProcessPoolExecutor просто имейте в виду, что второй сможет получать и возвращать только выбираемые объекты и что первый будет порождать дочерний поток, прикрепленный к вашему основному процессу (возможно, к вашему веб-серверу, если вы не используете его внутри другого отдельного процесса) поэтому подход к их смешиванию может иметь смысл в зависимости от деталей вашей реализации.

person Mauro Rocco    schedule 18.05.2016
comment
Я сделал это в своем коде ранее, и я могу сказать, что это возможно. Существует несколько исполнителей пула процессов, в которых выполняются исполнители пула потоков. Единственная проблема, которую я вижу, заключается в том, что загрузка ЦП начинает бить по крыше при высокой нагрузке, которая хорошо управляется сельдереем. - person Tragaknight; 27.01.2019