我在Django的views.py中调用db = pymongo.Connection()
调用一个简单的MongoDB连接来存储一些简单的统计信息。
使其自动支持MongoDB连接池的最佳做法是什么?
我需要在哪里放置end_request()
代码?
如何在连接期间选择max_pool_size
参数?
答案 0 :(得分:8)
How does connection pooling work in PyMongo?
每个Connection实例都有内置连接池。默认情况下, 每个线程在其第一次操作时都会保留自己的套接字。那些 保持套接字,直到该线程调用end_request()。
调用end_request()允许将套接字返回到池中, 并由其他线程使用,而不是创建一个新的套接字。 明智地使用这种方法对于许多应用程序非常重要 线程或长时间运行的线程,几乎不会调用PyMongo 操作
或者,使用auto_start_request = False创建的Connection将会 在所有线程中共享套接字(安全)。
我认为这取决于您拥有的应用程序类型以及请求对连接的持续时间。调用end_request
的想法有助于长时间运行请求,长时间保持套接字并导致创建许多套接字。如果单个请求可以在不再需要时释放连接,则可以将套接字重新用于其他请求。
如果它们是快速请求,那么我相信auto_start_request=False
通过重用套接字来工作。
确保连接保持使用相同的套接字意味着具有一致的读取。想想你是否进行了查询但是它被延迟了,然后立即进行了另一个查询并使用了不同的套接字。此套接字设法在前一个之前响应。您会有不一致的数据,因为它不会反映先前的写入。