Рабочие Gunicorn не влияют на производительность - PullRequest
0 голосов
/ 19 апреля 2020

Мое приложение работает над определением элементов документа и классификацией + извлечением информации в нем. (NER и прогнозы модели классификации) Документ отправляется, обрабатывается, и вся информация отправляется обратно клиенту.

Я использую сервер Gunicorn + Flask. Я пробовал различные комбинации рабочих-оружейников, рабочих классов, потоков и т. Д. c ... но, похоже, все они работают так же, как и приложение, использующее только сервер flask, использующий один процесс.

Я не уверен, что происходит не так. Gunicorn не использует все ядра, так как я предполагаю, что он предварительно разветвляется в главном процессе, но независимо от того, добавляю я 1 рабочего или 4, я не могу улучшить производительность при обслуживании асинхронных c запросов.

В настоящее время:

  • 4 asyn c запросов от клиента
  • Для Gunicorn установлено 4 рабочих и 2 потока с рабочим классом = gthread

Производительность такая же, как при работе только одного работника. У меня сложилось впечатление, что gunicorn передаст каждый файл каждому работнику, и они смогут обрабатывать документ отдельно. Но это не уменьшает время, необходимое для обработки всех 4 документов. Похоже, что они обрабатываются последовательно или просто работают так, как если бы они обрабатывались одним рабочим.

Мой пример файла конфигурации:

bind:{{server_ip}}:5001
max_requests:1000
max_requests_jitter:2
workers:4 #max_workers()
worker_class:'sync' #or 'gthread' or 'gevent'
threads:3
timeout:1500
worker_connections = 100
daemon:True
access_log_format:'%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"'
#accesslog:'/Logs/access_request.log'
#errorlog:'/Logs/transactions.log'
capture_output:True

Есть ли способ, которым я могу использовать все ядра? Может быть, реализовать очередь, опросить ее и, возможно, дать каждый файл для обработки каждым ядром в системе?

Я не могу улучшить производительность обслуживания асин c запросов от клиента.

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

...