Вопрос по python, pymongo – pymongo пул соединений и клиентские запросы

16

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

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

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

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

Ваш Ответ

1   ответ
8

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

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

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

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

If your webapp requests are threaded, then it doesn't matter which way you access a new connection. The result will be the same (socket per thread) If your webapp is async via gevent, then it doesn't matter which way you access a new conection. The result will be the same. (socket per greenlet) If your webapp is async, but NOT via gevent, then you have to take into consideration the notes on the best suggested workflow.

Похожие вопросы