我是否需要跟踪 asyncio 事件循环,或者我可以在需要时调用 asyncio.get_event_loop 吗?
Do I need to keep track of the asyncio event loop, or can I just call asyncio.get_event_loop when it is needed?
我正在使用 aiohttp
.
编写 REST API
部分协程需要使用aiomysql
library调用数据库。 aiomysql
的文档有以下示例:
import asyncio
import aiomysql
loop = asyncio.get_event_loop()
async def test_example():
conn = await aiomysql.connect(host='127.0.0.1', port=3306,
user='root', password='', db='mysql',
loop=loop)
cur = await conn.cursor()
await cur.execute("SELECT Host,User FROM user")
print(cur.description)
r = await cur.fetchall()
print(r)
await cur.close()
conn.close()
loop.run_until_complete(test_example())
我的问题是关于全局变量的定义loop
:
loop = asyncio.get_event_loop()
我真的需要将 loop
作为全局变量保存在某处,还是我可以在需要时调用 asyncio.get_event_loop()
?
例如上面的代码示例,当我连接到数据库时,我可以得到事件循环:
conn = await aiomysql.connect(host='127.0.0.1', port=3306,
user='root', password='', db='mysql',
loop=asyncio.get_event_loop())
调用 asyncio.get_event_loop()
或其他我遗漏的东西是否有不小的运行时成本?
loop
参数应该去。
aiomysql 应更新为不接受循环。
您现在可以跳过代码中的 loop=...
,因为 aiomysql.connect()
具有参数的默认 loop=None
值。
一般来说,asyncio.get_event_loop()
会被弃用; asyncio.get_running_loop()
建议在需要时从异步代码中使用。从 Python 3.8.
开始,不推荐将显式循环传递给 asyncio API
我正在使用 aiohttp
.
部分协程需要使用aiomysql
library调用数据库。 aiomysql
的文档有以下示例:
import asyncio
import aiomysql
loop = asyncio.get_event_loop()
async def test_example():
conn = await aiomysql.connect(host='127.0.0.1', port=3306,
user='root', password='', db='mysql',
loop=loop)
cur = await conn.cursor()
await cur.execute("SELECT Host,User FROM user")
print(cur.description)
r = await cur.fetchall()
print(r)
await cur.close()
conn.close()
loop.run_until_complete(test_example())
我的问题是关于全局变量的定义loop
:
loop = asyncio.get_event_loop()
我真的需要将 loop
作为全局变量保存在某处,还是我可以在需要时调用 asyncio.get_event_loop()
?
例如上面的代码示例,当我连接到数据库时,我可以得到事件循环:
conn = await aiomysql.connect(host='127.0.0.1', port=3306,
user='root', password='', db='mysql',
loop=asyncio.get_event_loop())
调用 asyncio.get_event_loop()
或其他我遗漏的东西是否有不小的运行时成本?
loop
参数应该去。
aiomysql 应更新为不接受循环。
您现在可以跳过代码中的 loop=...
,因为 aiomysql.connect()
具有参数的默认 loop=None
值。
一般来说,asyncio.get_event_loop()
会被弃用; asyncio.get_running_loop()
建议在需要时从异步代码中使用。从 Python 3.8.