下面您可以从我的python脚本中找到一个代码段。
我有以下问题:
是否有必要像下面的示例中那样显式关闭循环?
import asyncio
loop = asyncio.get_event_loop()
loop.run_until_complete(my_async_task())
try:
loop.run_forever()
except KeyboardInterrupt:
print('Stopping...')
finally:
loop.close()
答案 0 :(得分:2)
由于程序仍在退出,这会自动将其所有资源释放回操作系统,因此,显式调用loop.close()
并不会获得任何好处-它只会使代码更长一些,而使程序的运行速度稍慢一些退出。
在用多次调用的代码创建(和运行)循环时,必须关闭事件循环,尤其是当该循环隐藏在可重用的类或函数之后时。无法关闭这样的循环会泄漏其内部资源,例如为call_soon_threadsafe
设置的管道。
请注意,仅当您要禁止显示通常由解释器提供的堆栈跟踪时,才必须显式捕获KeyboardInterrupt
。