0

我在开发基于异步的 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)

关于这种行为有什么帮助吗?

4

0 回答 0