Celery + Eventlet + без блокировки запросов

Я использую requests Python у workers сельдерея, чтобы сделать большое количество (~ 10 / сек) вызовов API (включая GET, POST, PUT, DELETE). Каждый запрос занимает около 5-10 секунд.

Я попробовал работать с eventlet в eventlet пула, с 1000 параллелизмом.

Поскольку requests блокируют процесс, каждое параллельное соединение ожидает по одному запросу.

Как сделать requests асинхронными?

2 Solutions collect form web for “Celery + Eventlet + без блокировки запросов”

Используйте патч обезьяны eventlet [1], чтобы сделать любую чистую библиотеку python неблокирующей.

  • patch single library # import requests # instead do this: import eventlet requests = eventlet.import_patched('requests') пакеты erequests и grequests могут быть разделены до этих двух строк.
  • patch import eventlet eventlet.monkey_patch() # must execute as early as possible ... import requests, amqp, memcache, paramiko, redis # everything is non-blocking now

[1] http://eventlet.net/doc/patching.html

Обновление: существует известная проблема [2] с библиотекой запросов исправления обезьяны. Если вы ImportError: cannot import name utils , затем измените строку импорта на requests = eventlet.import_patched('requests.__init__') [2] https://github.com/eventlet/eventlet/issues/7

из документов :

есть много проектов, которые объединяют Запросы с одной из асинхронных возможностей Python. Два отличных примера – это графики и запросы-фьючерсы.

для eventlet специально вы можете использовать erequests .

  • Создайте HTTP-запрос GET с номером и параметрами порта
  • Не удалось отправить файл в Imgur
  • Процесс многопроцессорности python уничтожается HTTP-запросом, если импортирован ipdb
  •  
    Interesting Posts for Van-Lav

    Утилита для подсчета количества строк кода в Python или Bash

    Метод без возвращаемого значения в модуле расширения python c

    Чтение выбранного столбца только из файла CSV, когда все остальные столбцы гарантированно идентичны

    Естественные сплайны Python с наименьшими квадратами

    Установка кода выхода в Python при возникновении исключения

    Как SWIG обертывает карту <string, string> в Python?

    Цепочка исключений Python

    random.choice from set? питон

    Как суммировать первое значение в наборе списков в кортеже?

    Python: потоковое аудио в реальном времени с PyAudio (или что-то еще)?

    Regex, чтобы найти URL-адреса в строке в Python

    Эффективный способ сделать большой запрос IN в Google App Engine?

    Эффективно перечислить все символы в данной категории Юникод

    mod_cgi, mod_fastcgi, mod_scgi, mod_wsgi, mod_python, FLUP. Я не знаю, сколько еще. что такое mod_php эквивалент?

    Измените цвет текста в pythas dataframe html table python, используя стили и css

    Python - лучший язык программирования в мире.