【问题标题】:pymongo connection pooling and client requestspymongo 连接池和客户端请求
【发布时间】:2012-06-13 16:08:22
【问题描述】:

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

在我正在开发的 Web 应用程序中,我正在为每个请求创建一个新的连接实例。

我的理解是,由于pymongo 管理连接池,因此在每个请求上创建一个新连接并没有错,因为在请求结束时,连接实例将被回收并在后续可用请求。

我在这里是正确的,还是应该只创建一个实例来跨多个请求使用?

【问题讨论】:

    标签: python pymongo


    【解决方案1】:

    “错误方法”取决于您的应用程序的架构。由于 pymongo 是线程安全的和自动连接池,实际使用单个共享连接或多个连接将“起作用”。但结果将取决于您期望的行为。两种情况下的文档都是 cmets。

    如果您的应用程序是线程化的,那么从文档中,每个访问连接的线程都将获得自己的套接字。因此,无论您是创建一个共享连接,还是请求一个新的共享连接,都取决于您的请求是否是线程化的。

    当使用 gevent 时,每个 greenlet 可以有一个套接字。这意味着您不必每个请求都有一个真正的线程。请求可以是异步的,并且仍然有自己的套接字。

    简而言之:

    • 如果您的 webapp 请求是线程化的,那么您访问新连接的方式并不重要。结果将是相同的(每个线程的套接字)
    • 如果您的 web 应用程序是通过 gevent 异步的,那么您访问新连接的方式并不重要。结果将是相同的。 (每个绿灯的插座)
    • 如果您的 webapp 是异步的,但不是通过 gevent,那么您必须考虑 best suggested workflow 上的注释。

    【讨论】:

      猜你喜欢
      • 2017-08-04
      • 1970-01-01
      • 2012-05-22
      • 2017-12-24
      • 1970-01-01
      • 2018-07-04
      • 2020-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多