项目场景:
项目过程中用pytest做自动化测试,有个别用例需要协程环境中执行。有些用例用asyncio.run跑,有些用例用的是asyncio.get_event_loop().run_until_complete
问题描述
结果发现个别用了asyncio.get_event_loop().run_until_complete的用例会报错:RuntimeError: There is no current event loop in thread 'MainThread'
原因分析:
通过查阅官方文档可知,asyncio.run执行完之后会终结异步生成器,并关闭线程池。
所以asyncio.run之后再asyncio.get_event_loop().xxx就会失败,:
import asyncio
async def test():
print("xx")
def main():
asyncio.run(test())
loop = asyncio.get_event_loop()
loop.run_until_complete(test())
main()
解决方案:
1、不要在asyncio.get_event_loop().xxx之前调用asyncio.run
2、调用asyncio.run之后新建一个event_loop