Запуск программы на Python, которая использует concurrent.futures в веб-приложении на основе сельдерея - PullRequest
0 голосов
/ 12 декабря 2018

Я работаю над приложением django, которое использует сельдерей для распределенных асинхронных процессов.Теперь мне поручено интегрировать процесс, который изначально был написан с помощью concurrent.futures, в коде.Итак, мой вопрос, может ли эта работа с параллельной обработкой фьючерсов работать в очереди задач сельдерея.Это вызовет какие-либо проблемы?Если это так, что будет лучшим способом идти вперед.Параллельный процесс, который был написан ранее, является ресурсоемким, поскольку он способен избежать GIL.Кроме того, это очень быстро из-за этого.Мало того, что процесс использует concurrent.futures.ProcessPoolExecutor и внутри него еще несколько (<5) заданий concurrent.futures.ThreadPoolExecutor. </p>

Так что теперь реальный вопрос заключается в том, должны ли мы извлечь все основные функции процесса ипереписать их, разбив их как задачи приложения сельдерея, или просто сохранить исходный код и запустить его как один большой кусок кода в очереди сельдерея.

Согласно проекту системы, пользователь системыможет представить несколько таких задач сельдерея, которые будут содержать параллельный код фьючерса.

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 22 декабря 2018

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

Причины разбивки кода могут быть связаны с управлением ресурсами (уменьшите нагрузку на память / ЦП),Что касается потоков, то вы хотите отслеживать нагрузку на процессор.Как только ваш параллелизм вызывает достаточную нагрузку (например, потоки, выполняющие нагрузку на процессор), ОС начнет переключаться между потоками, и ваша обработка будет выполняться медленнее, а не быстрее.

...