使用aiosmtpd搭建SMTP服务器遇asyncio.get_event_loop()弃用警告,求正确实现
解决asyncio.get_event_loop()的弃用警告问题
这个警告是因为Python 3.10及以后版本中,asyncio.get_event_loop()在没有默认事件循环的线程中调用时,不再自动创建新循环,触发了弃用提示。以下是两种正确的实现方式:
方式一:使用asyncio.run()(推荐)
这是现代asyncio推荐的启动方式,它会自动创建、运行并关闭事件循环,代码更简洁:
import asyncio if __name__ == '__main__': asyncio.run(amain())
如果你的amain函数原本需要接收loop参数,建议修改函数内部通过asyncio.get_running_loop()获取当前活跃的事件循环,无需手动传递:
async def amain(): loop = asyncio.get_running_loop() # 后续SMTP服务器初始化逻辑
方式二:显式创建并管理事件循环
如果需要更精细地控制事件循环的生命周期(比如自定义关闭逻辑),可以显式创建新循环:
import asyncio if __name__ == '__main__': loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) try: loop.create_task(amain(loop=loop)) loop.run_forever() except KeyboardInterrupt: pass finally: loop.close()
内容的提问来源于stack exchange,提问作者howley
相关产品推荐
相关产品推荐

