Pymongo + Gevent: бросить мне банан и просто monkey_patch? - PullRequest
13 голосов
/ 24 августа 2011

Quickie, который нуждается в большем количестве знаний о домене для pymongo, чем я сейчас:

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

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

Спасибо!

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

Ответы [ 2 ]

18 голосов
/ 24 августа 2011

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

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

Ответна ваш вопрос: вперед, PyMongo прекрасно работает с Gevent.

2 голосов
/ 24 августа 2011

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

...