我在开发基于异步的 Python 应用程序时遇到了一些麻烦。
让我解释:
当我启动 Python 进程时,通过电机驱动程序的 Mongo 查询运行得非常快:每个 0 到 1 毫秒。
但是,当进程运行了两分钟左右并且完成了一些查询时,每个查询所花费的时间从 1 毫秒增加到 200 毫秒甚至更多。
申请代码:
数据库连接
async def init_pool(self, environment):
try:
mongo_config = self.config[environment]
url = await self.build_url_connection(mongo_config=mongo_config)
client = motor.motor_asyncio.AsyncIOMotorClient(url, serverSelectionTimeoutMS=mongo_config['timeout'])
self.pool[environment] = client[mongo_config['database']]
except:
pass
async def get_pool(self):
if 'admin' not in self.pool:
await self.init_pool(environment='admin')
return self.pool['admin']
阅读文档方法:
async def read_single_document(filter, collection, projection=None):
mongo_connection = await connection_obj.get_pool()
mongo_client = mongo_connection[collection]
result = await mongo_client.find_one(filter, projection)
return result
在日志中花费的时间:
2021-07-27 12:33:52,355 信息 -- 过滤器 {'imei': 352625692901745} -- read_single_document -- 0 毫秒
2021-07-27 12:33:52,357 信息 -- 过滤器 {'imei': 352625692901745} -- update_single_document -- 0 毫秒
2021-07-27 12:41:01,090 警告 -- 过滤器 {'imei': 352625692901745} -- read_single_document -- 688 毫秒
2021-07-27 12:41:01,307 警告 -- 过滤器 {'imei': 352625692901745} -- update_single_document -- 208 毫秒
数据库具有正确的索引。
所有时间都花在这一行:
result = await mongo_client.find_one(filter, projection)
关于这种行为有什么帮助吗?