有必要打电话吗 cleanup()
之前 close()
在一个 PythonInterpreter
每次都在jython?
我一直在看文档,但是我没有找到关于这个函数的很多信息。javadocs什么都没说。我找到的最接近的信息是在readthedocs中,它们解释了在某些情况下使用线程编程时需要进行清理,我甚至不确定它们是否引用了这个特定函数。
我不知道什么时候需要打电话 cleanup()
... 如果答案总是,那他们为什么要 cleanup()
以及 close()
单独的功能?
1条答案
按热度按时间6psbrbz91#
好的,我已经阅读了jython的源代码并做了一些测试。以下是我的发现:
什么
cleanup()
does:它负责未绑定的资源,比如运行线程和文件。什么
cleanup()
不:以任何形式重置解释器的状态;导入的模块和定义的变量被保留。以下示例显示了此行为:
例1
让我们导入一个模块,定义一个变量并打开一个文件。
it输出
模块
sys
以及变量a
以及f
清理后仍然存在具有相同值的文件,但打开的文件已关闭。例2
为了这个,
func
是一个缓慢的功能,大约需要2秒才能完成(比正常的cleanup()
).输出:
在第一次执行中,主线程有足够的时间检查
th
是活生生的然后打印出来。在第二种情况下,它总是等待th
结束,意味着cleanup()
在某处连接线。结论
正如@mzjn所指出的
close()
函数调用cleanup()
这很有道理,所以你不需要打电话cleanup()
之前close()
. 如果您想继续使用PythonInterpreter
但需要关闭所有打开的文件并连接所有线程。