我正在使用asyncio和aiohttp发出并发请求.我最近将Python升级到了3.8.0版,并且在程序运行后得到了 RuntimeError:事件循环已关闭.
I am using asyncio and aiohttp to make concurrent requests. I've recently upgraded Python to version 3.8.0 and I'm getting a RuntimeError: Event loop is closed after the program has run.
import asyncio import aiohttp async def do_call(name, session): async with session.get('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()获得了有效的结果,但是退出时会引发异常.我想更改代码,以免出现异常.
I do get a valid result from asyncio.gather(), but when exiting the exception is raised. I'd like to change the code so it doesn't run into exceptions.
回溯如下:
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` 推荐答案我认为这很可能是aiohttp错误.具体来说,我在他们的github上发现了此问题: github/aio-libs/aiohttp/issues/4324
I think this is most likely an aiohttp bug. Specifically, I found this issue on their github: github/aio-libs/aiohttp/issues/4324
我知道这不一定对您有帮助,但是也许您可以转回去,不再用头撞墙.您的代码很好!
I realise this doesn't necessarily help you, but maybe you can switch back and stop banging your head against a wall. Your code is fine!
更多推荐
在python 3.8中使用aiohttp和asyncio关闭异常事件循环
发布评论