一般来说,Python解释器是如何退出的?
例如:
print('aaa')
执行此代码后,除了调用注册了atexit
的退出处理程序外,解释器在正常退出时(没有引发异常)并且不调用os._exit
时还会做什么来释放资源?
Python解释器是否在每个出口调用一个主钩子/函数?
print('aaa')
_exit() # called automatically on every exit
答案 0 :(得分:3)
假设未调用os._exit()
,所有python初始化都以Py_Initialize
启动解释器,然后执行给定的Python代码,然后将状态代码传递给操作系统。这真的是这样的:
n = PyImport_ImportFrozenModule("__main__");
if (n == 0)
Py_FatalError("__main__ not frozen");
if (n < 0) {
PyErr_Print();
sts = 1;
}
else
sts = 0;
if (inspect && isatty((int)fileno(stdin)))
sts = PyRun_AnyFile(stdin, "<stdin>") != 0;
#ifdef MS_WINDOWS
PyWinFreeze_ExeTerm();
#endif
if (Py_FinalizeEx() < 0) {
sts = 120;
}
error:
PyMem_RawFree(argv_copy);
if (argv_copy2) {
for (i = 0; i < argc; i++)
PyMem_RawFree(argv_copy2[i]);
PyMem_RawFree(argv_copy2);
}
PyMem_RawFree(oldloc);
return sts;
偶数sys.exit
只会引发异常,以便解释器完全退出。
是否有Python解释器调用的主钩子/函数 每个出口?
只需试一试你的main()
。