【发布时间】:2019-12-09 19:23:32
【问题描述】:
我正在使用 asyncio 和 aiohttp 来发出并发请求。我最近将 Python 升级到了 3.8.0 版,并且在程序运行后我收到了 RuntimeError: Event loop is closed。
import asyncio
import aiohttp
async def do_call(name, session):
async with session.get('https://www.google.be') as response:
await response.text()
return 'ok - {}'.format(name)
async def main():
async with aiohttp.ClientSession() as session:
tasks = [do_call(str(i), session) for i in range(0,4)]
results = await asyncio.gather(*tasks)
print(results)
asyncio.run(main())
我确实从 asyncio.gather() 获得了有效结果,但是在退出时引发了异常。 我想更改代码,使其不会遇到异常。
回溯如下:
Exception ignored in: <function _ProactorBasePipeTransport.__del__ at 0x000001E9A92079D0>
Traceback (most recent call last):
File "C:\Users\Jonas\AppData\Local\Programs\Python\Python38\lib\asyncio\proactor_events.py", line 116, in __del__
self.close()
File "C:\Users\Jonas\AppData\Local\Programs\Python\Python38\lib\asyncio\proactor_events.py", line 108, in close
self._loop.call_soon(self._call_connection_lost, None)
File "C:\Users\Jonas\AppData\Local\Programs\Python\Python38\lib\asyncio\base_events.py", line 711, in call_soon
self._check_closed()
File "C:\Users\Jonas\AppData\Local\Programs\Python\Python38\lib\asyncio\base_events.py", line 504, in _check_closed
raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed`
【问题讨论】:
-
您能否发布 RuntimeError 的完整回溯?这会很有帮助:)
-
您的示例为我运行而没有错误。是否还有其他与此相关的代码可能导致错误?
-
@PirateNinjas,感谢您的回复。完整的程序发布在这个问题中。我已将回溯添加到问题中。
-
您使用的是哪个版本的 aiohttp?我有你的代码使用 python=3.8.0 和 aiohttp=3.6.2
-
@PirateNinjas 我也在使用 3.6.2,在 windows 10 上运行。你在程序结束时遇到异常吗?
标签: python async-await aiohttp python-asyncio