Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python3.8中,异常事件循环使用aiohttp和asyncio关闭_Python_Async Await_Aiohttp_Python Asyncio - Fatal编程技术网

在Python3.8中,异常事件循环使用aiohttp和asyncio关闭

在Python3.8中,异常事件循环使用aiohttp和asyncio关闭,python,async-await,aiohttp,python-asyncio,Python,Async Await,Aiohttp,Python Asyncio,我使用asyncio和aiohttp进行并发请求。我最近将Python升级到了3.8.0版,我得到了一个运行时错误:在程序运行后,事件循环关闭 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

我使用asyncio和aiohttp进行并发请求。我最近将Python升级到了3.8.0版,我得到了一个
运行时错误:在程序运行后,事件循环关闭

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`
中忽略的异常:
回溯(最近一次呼叫最后一次):
文件“C:\Users\Jonas\AppData\Local\Programs\Python38\lib\asyncio\proactor\u events.py”,第116行,在__
self.close()
文件“C:\Users\Jonas\AppData\Local\Programs\Python38\lib\asyncio\proactor\u events.py”,第108行,关闭
self.\u循环。尽快呼叫(self.\u呼叫\u连接\u丢失,无)
文件“C:\Users\Jonas\AppData\Local\Programs\Python38\lib\asyncio\base\u events.py”,第711行,即将调用
自我检查关闭()
文件“C:\Users\Jonas\AppData\Local\Programs\Python\Python38\lib\asyncio\base\u events.py”,第504行,在\u check\u closed中
raise RUNTIMERROR('事件循环已关闭')
RuntimeError:事件循环已关闭`

我认为这很可能是一个aiohttp错误。具体来说,我在他们的github上发现了这个问题:


我意识到这不一定对你有帮助,但也许你可以换回来,不再把头撞在墙上。你的代码很好

我认为这很可能是一个aiohttp错误。具体来说,我在他们的github上发现了这个问题:


我意识到这不一定对你有帮助,但也许你可以换回来,不再把头撞在墙上。你的代码很好

我解决了这个问题,在使用完
my\u loop.close()之后,我没有调用它。以这种方式关闭事件循环会导致错误被抛出,即使在我获得了预期的所有响应之后也是如此。

我解决了这个问题,在使用完
my\u loop.close()
。以这种方式关闭事件循环会导致错误被抛出,即使在我获得了预期的所有响应之后。

您可以发布运行时错误的完整回溯吗?这将是有益的:)你的例子运行我没有错误。是否有其他与此相关的代码可能导致此错误?@piratenijas,谢谢您的回复。完整的程序张贴在这个问题上。我已经添加了问题的回溯。您使用的是哪个版本的aiohttp?我让您的代码使用python=3.8.0和aiohttp=3.6。2@PirateNinjas我也在使用3.6.2,运行在Windows10上。您是否在程序结束时遇到异常?能否发布运行时错误的完整回溯?这将是有益的:)你的例子运行我没有错误。是否有其他与此相关的代码可能导致此错误?@piratenijas,谢谢您的回复。完整的程序张贴在这个问题上。我已经添加了问题的回溯。您使用的是哪个版本的aiohttp?我让您的代码使用python=3.8.0和aiohttp=3.6。2@PirateNinjas我也在使用3.6.2,运行在Windows10上。节目结束时是否有例外情况?+1用于问题链接:为我做了诀窍。+1用于问题链接:为我做了诀窍。不幸的是,我认为这不适用于上述问题。提问者使用了asyncio.run,而不是获取事件循环,事件循环将事件循环闭包到其行为中。也就是说,使用run时,您永远不会呼叫close,因此您无法利用您的答案。不幸的是,我认为这不适用于上述问题。提问者使用了asyncio.run,而不是获取事件循环,事件循环将事件循环闭包到其行为中。也就是说,使用run时,您永远不会呼叫close,因此您无法利用您的答案。