2012-06-10 3 views
15

Я знаю pymongo является потокобезопасным и имеет встроенный пул соединений.pymongo соединение пул и запросы клиентов

В веб-приложении, над которым я работаю, я создаю новый экземпляр подключения для каждого запроса.

Насколько я понимаю, поскольку pymongo управляет пулом соединений, это неправильный подход для создания нового соединения по каждому запросу, так как в конце запроса экземпляр подключения будет восстановлен и будет доступен при последующих запросах ,

Я исправлю здесь, или я должен просто создать один экземпляр для использования по нескольким запросам?

ответ

8

«Неправильный подход» зависит от архитектуры вашего приложения. Поскольку pymongo является поточно-безопасным и автоматическим пулом соединений, фактическое использование единого общего подключения или нескольких соединений будет «работать». Но результаты будут зависеть от того, что вы ожидаете от поведения. Комментарии к документации по обоим случаям.

Если ваше приложение связано с резьбой, из документов каждый поток, обращающийся к соединению, получит свой собственный сокет. Таким образом, независимо от того, создаете ли вы одно общее соединение или запрашиваете новый, все зависит от того, были ли ваши запросы потоковыми или нет.

При использовании gevent вы можете иметь гнездо на каждую розу. Это означает, что вам не нужно иметь истинный поток для каждого запроса. Запросы могут быть асинхронными и по-прежнему получать свой собственный сокет.

В двух словах:

  • Если ваши запросы WebAPP нанизаны, то это не имеет значения, каким образом вы получаете доступ новое соединение. Результат будет таким же (сокет на поток)
  • Если ваш webapp асинхронный через gevent, то не имеет значения, каким путем вы получаете доступ к новому коннекту. Результат будет таким же. (гнездо на гриле)
  • Если ваш webapp is асинхронный, но НЕ через gevent, тогда вы должны учитывать примечания на best suggested workflow.
Смежные вопросы