Комментарии 5
знакомая ситуация. с воркерами обычно упираешься в узкое место - база, диск или память. в чем была главная проблема? постгрес не успевал или что-то другое?
Сталкивался с подобным падением производительности на PostgreSQL при параллельных воркерах. У меня было простое добавление записей в одну таблицу. Там узким местом оказался PostgreSQL. Если дело в конкурентном доступе и блокироваках, CPU может быть не высоким, замедление было из-за количества транзакций. В моём случае решением было накапливание вставляемых строк на стороне приложения и периодическое выполнение вставки пачек строк с параметрами-массивами и конструкцией unnest(). Вставка происходила по тому что наступит раньше: установленный период или максимальное количество ожидающих строк.
Чтобы исключить проблему с транзакциями, попробуйте открывать и коммитить транзакции не на каждый запрос, а на несколько (но это решение не для прода)
Запускаем несколько процессов-воркеров
Запускаем очередь с работами
Процессы-воркеры берут работы из очереди работ
Процессы-воркеры выполняют работы
Запускаем процесс логирования
Процессы-воркеры кладут записи в очередь логирования
Процесс логирования берет записи из очереди логирования и пишет в лог
По-моему нужно так. Только нужно учесть, процессы-воркеры не должны стартовать на каждую работу заново (это я на всякий случай написал)
Еще и с выполнеными работами нужно смотреть, может тоже нужна очередь. А может и нет.
И в такой схеме многое зависит от специфики работ и результата, если для работ нужно большое количество входных данных, очереди могут стать бутылочным горлышком.
Почему дополнительные coroutine не бесплатны
Интуиция говорит, что это какая-то фигня. Пол секунды оверхеда на 350 задач в очереди? Питон конечно не быстрый, но не настолько. Отключите логирование и поверьте это отдельно. Может там ещё какие синхронные процессы затесались.
Что именно вы вкладываете в понятие воркера, где вы его конфигурируете?
Какое колличество тредов в пуле евентлупа и сколько у вас ядер в процессоре?

Я думал, что 16 воркеров ускорят обработку задач в 16 раз. Но что‑то пошло не так