pymongo连接池和客户端的请求(pymongo connection pooling and c

2019-07-29 19:50发布

我知道pymongo是线程安全的,并有一个内置的连接池。

在我工作的一个Web应用程序,我创建在每次请求一个新的连接实例。

我的理解是,由于pymongo管理连接池,这是没有错的方法来创建对每个请求一个新的连接,在连接实例将被回收的请求结束,并将于后续请求。

我是正确这里,或者我应该只创建一个实例跨多个请求使用?

Answer 1:

“错误的方式”取决于你的应用程序的架构。 随着pymongo是线程安全的,自动连接池,一个单一的共享连接或多个连接的实际使用中,是要“工作”。 但结果将取决于你所期望的行为是什么。 文档在这两种情况下评论。

如果您的应用程序线程,从文档,每个线程访问的连接将获得它自己的插座。 所以,不管你创建一个单一的共享连接,或申请一个新的,把它归结为你的请求是否螺纹与否。

当使用GEVENT,你可以为每个greenlet的插座。 这意味着你不必让每个请求的线程真实。 该请求可以是异步,仍然获得自己的插座。

简而言之:

  • 如果你的web应用的请求线程,那么它不会不管你访问一个新的连接哪种方式。 其结果将是相同的(每线插座)
  • 如果你的Web应用程序是通过GEVENT异步,那么也不要紧,你访问一个新的连接如哪种方式。 其结果将是相同的。 (每greenlet插座)
  • 如果你的web应用是异步,而不是通过GEVENT,那么你必须考虑到的音符最好的建议的工作流程 。


文章来源: pymongo connection pooling and client requests