【发布时间】:2020-04-09 19:51:03
【问题描述】:
我正在编写一个 Python 应用程序,以便在后端使用 pymongo 使用 Mongodb。
我创建了一个模型类来镜像插入数据库的文档 这是实际模型的一个简单示例:
if __name__ == '__main__':
class MyApp(App):
db_client = MongoClient(replicaset='erpRS').test
def build(self):
model = models.UserModel(name='NewUser', cpf='01234567890')
print(model)
model.save()
model_from_db = models.UserModel.objects.find_one()
print(model_from_db)
def on_stop(self):
self.db_client.close()
我的模型类(例如:UserModel)创建一个 Collection 实例作为类属性,用于 CRUD 操作。所以在上面的 sn-p 上,我创建了一个用户并将其保存到数据库中。然后我从数据库中获取以前保存的用户。当应用停止时,on_stop() 被调用并且 pymongo 客户端被调用并且它的连接被关闭。
此代码按预期工作。
但是监控数据库,我可以看到上面的片段,只有一个模型实例,因此,一个 Collection 实例和两个对 CRUD 操作的调用,打开了多达 6 个到数据库的连接。
进一步检查 mongodb 本身似乎保持了许多连接打开。该程序运行一次后,我的 3 节点 ReplicaSet 都在同一台机器上运行,打开了 19 个连接。
这是一个合理的行为吗?应该有这么多打开的连接吗?
【问题讨论】: