Неудовлетворительная производительность работы с Python RQ - программирование
Подтвердить что ты не робот

Неудовлетворительная производительность работы с Python RQ

Пытаясь использовать python-rq, чтобы поддержать задний конец нашего веб-приложения, но нажимать новые задания занимает очень много времени - до 12 секунд.

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

Система работает следующим образом:

  • Передний конец помещает задания на сервер очереди задач. Это использует функцию enqueue_call для передачи аргументов в задание (например, тайм-аут и ttl) в дополнение к фактическим аргументам функции, которая должна быть выполнена.
  • Несколько процессов (разбросанных по нескольким машинам) работают с рабочими, каждый под UNIX screen. Рабочие следуют шаблону, представленному в документации, выполняя функцию Worker.work() бесконечного цикла для прослушивания в очередях.
  • Во время обработки некоторые из задач порождают новые, обычно в той же очереди, на которой они запущены.

Об инфраструктуре:

  • Сервер Redis, который запускает эту очередь задач, посвящен этому. Кроме того, постоянство отключено. Он работает на сервере Rackspace объемом 4 ГБ.
  • При запуске redis-benchmark на сервере с очередью задач мы получаем в среднем более 20000 р/с для большинства тестов.

Как мы можем улучшить производительность push для новых рабочих мест в такой ситуации? Есть ли лучший образец, который мы должны использовать?

4b9b3361

Ответ 1

12 секунд? Это безумие.

Считаете ли вы использование сельдерея?
Никогда не использовал redis-rq, но из того, что я вижу на основе документов, это не очень хорошо для большого числа рабочих
Обычно очередь Redis основана на команде BLPOP, которая может работать с несколькими клиентами, но кто знает, сколько она может действительно обрабатывать для одного ключа.

Поэтому я предлагаю вам переключиться на Celery или написать собственный дистрибьютор задач для python-rq, который не будет проще, чем переключение