异步警告流对象被垃圾回收;显式调用“ stream.close()”

时间:2020-09-05 09:53:17

标签: python python-3.x async-await python-asyncio aio-mysql

我正在使用python3.8的内置asyncio软件包和已安装的aiomysql软件包来实现异步MySQL查询执行。即使我已正确关闭了所有打开的游标和连接,也仍会在控制台上继续显示错误消息,如下所示。

An open stream object is being garbage collected; call "stream.close()" explicitly.

下面是代码摘要...

#db.py

import asyncio

class AsyncMysqlSession:

    def __init__(self, loop, db_settings=DEFAULTDB):
        self.db_settings = db_settings
        self.loop = loop

    async def __aenter__(self):
        self.conn = await aiomysql.connect(host=self.db_settings['HOST'],
                                       port=self.db_settings['PORT'],
                                       user=self.db_settings['USER'],
                                       password=self.db_settings['PASSWORD'],
                                       db=self.db_settings['NAME'],
                                       loop=self.loop)
        self.cursor = await self.conn.cursor(aiomysql.cursors.DictCursor)
        return self

    async def __aexit__(self, exception, value, traceback):
        await self.cursor.close()
        self.conn.close()

    async def query(self, sql, *args):
        await self.cursor.execute(sql, values)
        await self.conn.commit()
        rows = await self.cursor.fetchall()
        return list(rows)


async def aiomysql_query(sql, *args):
    """
    Mysql asynchronous connection wrapper
    """
    loop = asyncio.get_event_loop()
    async with AsyncMysqlSession(loop) as mysql:
        db_result = await mysql.query(sql, *args)
        return db_result

aiomysql_query已导入另一个文件

#views.py

 import asyncio
 .....
 

 async def main():
     .....
     .....
     
     await aiomysql_query(sql1, *args1)
     await aiomysql_query(sql2, *args2)

 .....

 asyncio.run(main())

 ....

我在这里做错了吗(?),还是显示错误消息? 解决该问题的任何线索将不胜感激... TIA!

0 个答案:

没有答案
相关问题