【发布时间】:2016-12-19 21:34:36
【问题描述】:
故事:
我目前正在浏览asyncio basic examples,尤其是this one——最简单的HTTP 客户端。 main函数启动一个事件循环,一直运行到数据获取完成,然后关闭事件循环:
def main():
loop = get_event_loop()
try:
body = loop.run_until_complete(fetch())
finally:
loop.close()
print(body.decode('latin-1'), end='')
但是,如果我省略 loop.close(),代码也可以工作:
def main():
loop = get_event_loop()
body = loop.run_until_complete(fetch())
print(body.decode('latin-1'), end='')
问题:
虽然有一个示例,但问题是一个通用问题 - 如果忘记关闭 asyncio 事件循环,可能会出现什么问题?事件循环会一直隐式关闭吗?
【问题讨论】:
-
你会泄露资源。
-
你认为什么是隐式关闭它?我认为你只能在程序结束时依赖垃圾收集,你的程序在完成事件循环后运行多长时间直到程序结束?
-
@FilipHaglund 谢谢。你能想出一种方法来测试/证明吗?
-
(请记住,link you have supplied 用于 python 3.3 的异步,not updated 用于 python 3.5/3.6。)
标签: python python-3.x python-asyncio