当前位置: 首页 > 面试题库 >

在python 3.8中使用aiohttp和asyncio关闭异常事件循环

史懿轩
2023-03-14
问题内容

我正在使用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`

问题答案:

我认为这很可能是aiohttp错误。具体来说,我在他们的github上发现了这个问题:https : //github.com/aio-
libs/aiohttp/issues/4324

我意识到这不一定对您有帮助,但是也许您可以转回去并停止将头撞在墙上。您的代码很好!



 类似资料:
  • 问题内容: 我正在尝试解决此错误:在我的异步过程中。我相信这是因为在任务仍未完成时发生故障,然后尝试关闭事件循环。我以为我需要在关闭事件循环之前等待其余的响应,但是我不确定如何在我的特定情况下正确完成该操作。 我该如何处理错误并正确关闭事件循环,以便可以启动一个新程序并从本质上重新启动整个程序并继续。 编辑: 根据这个答案,这就是我现在正在尝试的方法。不幸的是,这种错误很少发生,因此,除非我可以强

  • Asynchronous Concurrency Concepts Cooperative Multitasking with Coroutines Starting a Coroutine Returning Values from Coroutines Chaining Coroutines Generators Instead of Coroutines Scheduling Calls t

  • 我正在处理ayncio模块,在终止程序时遇到问题。我正在终端中运行我的程序,而Ctrl C无法停止正在运行的程序。但是,如果我关闭终端并再次尝试运行程序,我会遇到以下问题: 下面是我的示例代码以供理解。 命令:pythonall_tasks.py 非常感谢您的帮助。谢谢

  • 我在Ubuntu 16上使用python 3.5。 我正在尝试使用aiohttp编写一个简单的客户端。 这是我的代码。我从这里拿走了。这是禁用ssl检查的第一个代码示例: 对于某些站点,此代码有效。对于其他人,包括或则不起作用。相反,代码会产生以下错误: 我尝试了一个简单的脚本,类似这样: 这工作,我能够达到谷歌。curl和wget也可以访问谷歌。 做一些研究,我遇到了一个不同的问题。那个问题和我

  • 这个问题应该很简单,而且可能会让人恼火,但我仍然对使用Java关闭结果集感到怀疑。每个语句都应该这样做,或者结果集应该只在final中关闭?

  • 本文向大家介绍JavaScript 异步操作和事件循环,包括了JavaScript 异步操作和事件循环的使用技巧和注意事项,需要的朋友参考一下 示例 常见的JavaScript编程环境中许多有趣的操作都是异步的。例如,在浏览器中,我们看到类似 在Node.js我们看到的东西像 这与事件循环如何配合? 这是如何工作的,当这些语句执行时,它们告诉主机环境(即Node.js分别为浏览器或运行时)关闭并可