在程序意外退出时是否有必要关闭asyncio循环?

时间:2018-12-28 22:54:08

标签: python python-3.x python-asyncio

下面您可以从我的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()

1 个答案:

答案 0 :(得分:2)

由于程序仍在退出,这会自动将其所有资源释放回操作系统,因此,显式调用loop.close()并不会获得任何好处-它只会使代码更长一些,而使程序的运行速度稍慢一些退出。

在用多次调用的代码创建(和运行)循环时,必须关闭事件循环,尤其是当该循环隐藏在可重用的类或函数之后时。无法关闭这样的循环会泄漏其内部资源,例如为call_soon_threadsafe设置的管道。

请注意,仅当您要禁止显示通常由解释器提供的堆栈跟踪时,才必须显式捕获KeyboardInterrupt