在Python中用asyncio关闭一个连接。

我正试图从数据库中检索数据,以便在api上下文中使用。 然而,我注意到conn.close()的执行时间相对较长(在这个上下文中,conn是一个来自mysql连接池的连接)。 由于关闭连接并不妨碍api返回数据的能力,我想我会使用asyncio来关闭连接异步,这样就不会妨碍数据的返回。

async def get_data(stuff):
    conn = api.db.get_connection()
    cursor = conn.cursor(dictionary=True)
    data = execute_query(stuff, conn, cursor)
    cursor.close()
    asyncio.ensure_future(close_conn(conn))
    return helper_rows

async def close_conn(conn):
    conn.close()

results = asyncio.run(get_data(stuff))

然而尽管asyncio.sure_future(close(conn))并没有阻塞(我放了计时语句来查看一切所需的时间,这个命令前后的时间大约相差1ms),但在close_conn完成之前不会得到实际结果。(我用时间语句验证了这一点,到达get_data中的返回语句和结果=asyncio.run(get_data(stuff))之后的那行时间相差200ms左右)。

所以我的问题是如何让这段代码在后台关闭连接,这样我就可以自由地去处理数据,而不用等待。

解决方案:

因为 conn.close() 并不是一个coroutine,当 close_conn 是预定的。如果你想做你所描述的事情,请使用一个异步sql客户端,然后执行 await conn.close().

给TA打赏
共{{data.count}}人
人已打赏
未分类

Devise Token Auth确认邮件链接已过期

2022-9-8 19:48:40

未分类

Python中的返回问题

2022-9-8 19:48:42

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索