python - 程序意外退出时是否需要关闭异步循环?

标签 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()

最佳答案

由于程序无论如何都会退出,这将自动将其所有资源释放回操作系统,显式调用 loop.close() 不会有任何好处。 - 它只会让代码变长一点,程序退出的速度稍微变慢。

当在多次调用的代码中创建(并运行)循环时,关闭事件循环是必要的,特别是当它隐藏在可重用的类或函数后面时。未能关闭此类循环会泄漏其内部资源,例如为 call_soon_threadsafe 设置的管道.

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

关于python - 程序意外退出时是否需要关闭异步循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53965162/

相关文章:

Python:mplot3d,绘制实体图

python - Pandas:从数据透视表中的一列中减去另一列

python - 将相同的字符串格式应用于不同数量的变量

python - Tkinter、Python 中框架的垂直滚动条

python - 如何在同一索引处用另一个字符串中的字符优雅地替换一个字符串中的某些字符?

python - 如何在Python中以先进先出的方式处理多个WebSocket?

python - Asyncio 使 HTTP 请求变慢?

python - 这个异步 aiohttp 代码有什么问题?

python - Django:在保存模型时检测一组字段的变化

python - 使用 pandas 计算列中的热门值