DeprecationWarning: There is no current event loop loop = asyncio.get_event_loop()错误

先上警告报错截图

这是我当时的代码 

async def func1(x,y):
    print(f'compute {x}+{y}...')
    await asyncio.sleep(1)
    return x+y
async def func2(x,y):
    result = await func1(x,y)
    print(f'{x}+{y}={result}')
if __name__ == '__main__':
    loop = asyncio.get_event_loop()  #1
    loop.run_until_complete(func2(1,2))
    loop.close()

根据提醒可以知道代码不报错在第11行,也就是我标记1的地方,接下来放上修改后的代码

async def func1(x,y):
    print(f'compute {x}+{y}...')
    await asyncio.sleep(1)
    return x+y
async def func2(x,y):
    result = await func1(x,y)
    print(f'{x}+{y}={result}')
if __name__ == '__main__':
    # loop = asyncio.get_event_loop()

    loop = asyncio.new_event_loop()  #1
    asyncio.set_event_loop(loop)     #2
    loop.run_until_complete(func2(1,2))
    loop.close()

解决这个警告很简单,将

loop = asyncio.get_event_loop()

更换成

loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)

 然后报错就解决了

写在最后 :

“There is no current event loop” 是在 Python 3.7 版本中引入的写法。在此之前,使用 asyncio 库时,如果没有明确创建事件循环,会抛出 RuntimeError 异常。而在 Python 3.7 中,为了简化代码和提供更好的错误提示,引入了新的写法 “There is no current event loop”。这样,在没有明确创建事件循环的情况下,会直接抛出该异常。

所以3.7以上版本都会有这个警告提醒,但仍可以使用原写法。

  • 11
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 这个报错表明你的代码正在尝试使用当前事件循环,但是没有检测到当前事件循环。这通常是因为你的代码正在尝试使用 `asyncio` 库,但是没有设置事件循环。 要解决这个问题,你需要在你的代码中设置事件循环。你可以使用 `asyncio.AbstractEventLoop.run_until_complete` 来设置事件循环,并在需要的地方调用它。 例如: ``` import asyncio async def my_task(): print("Hello, World!") loop = asyncio.get_event_loop() loop.run_until_complete(my_task()) loop.close() ``` 这样就能解决这个报错。 ### 回答2: DeprecationWarning: There is no current event loop 是Python代码中常见的警告信息,通常出现在使用asyncio库时没有设置当前的事件循环。要解决这个报错,可以采取以下两种方法: 1. 在异步代码块中设置当前事件循环。可以使用以下代码来创建并设置事件循环: ``` import asyncio loop = asyncio.get_event_loop() # 在此处编写异步代码 ``` 使用上述代码将获取并设置一个事件循环,然后在获取事件循环后进行异步操作。 2. 使用`asyncio.run()`方法包装主函数。 ``` import asyncio async def main(): # 在此处编写异步代码 asyncio.run(main()) ``` `asyncio.run()`是在Python 3.7中引入的方法,用于运行异步函数。它将自动创建一个新的事件循环,并将主函数封装在其中。使用这种方法可以简化代码,避免手动设置事件循环的繁琐过程。 总结来说,要解决DeprecationWarning: There is no current event loop的报错,可以设置当前事件循环或使用asyncio.run()方法包装主函数。当然,在实际开发过程中,还需要根据具体情况进行适当的异步编程调整,以充分利用asyncio库的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

给你给个糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值