Подтвердить что ты не робот

Pymongo + gevent: бросьте мне банан и просто monkey_patch?

Quickie здесь, где вам нужно больше знаний о доменах на pymongo, чем я сейчас:

Являются ли "правильные" части драйвера pymongo, написанные на python, для вызова gevent monkey_patch() и успешно изменяют поведение блокировки pymongo на r/w в gevent "асинхронных" озерах?

Если для этого понадобится немного больше работы на gevent и pymongo - но это выполнимо - я бы более чем хотел поставить время, пока я могу получить небольшое руководство по irc.

Спасибо!

Примечание. В небольших масштабах записи mongo не являются большой проблемой, потому что мы просто ставим "запрос" для записи перед разблокировкой. НО поговорив с fiorix о своем искривленном асинхронном монго (https://github.com/fiorix/mongo-async-python-driver), даже быстрая запись (запросы) манго может вызвать проблемы в асинхронных приложениях в масштабе. (И, конечно, неблокирующие чтения могут вызвать проблемы с самого начала!)

4b9b3361

Ответ 1

Я использовал PyMongo с Gevent, и вот несколько вещей, которые вам нужно соблюдать:

  • Создавать только один объект pymongo.Connection, предпочтительно как глобальную или модульную переменную. Это важно, потому что Connection имеет в себе пул!
  • Обезьяна патчит все, или, по крайней мере, BOTH сокет и потоки. Из-за использования локаторов потоков в Connection недостаточно одного исправления.
  • Не забудьте вызвать end_request, чтобы вернуть соединение с пулом.

Ответ на ваш вопрос идет дальше, PyMongo отлично работает с Gevent.

Ответ 2

При первоначальной проверке он не выполняет никаких операций сокета в коде c, поэтому он должен быть точным (блокировка ops должна просто блокировать зеленую нить).