代码之家  ›  专栏  ›  技术社区  ›  user459872

什么是“sys.is_finalizing”,什么时候有用?

  •  0
  • user459872  · 技术社区  · 3 年前

    这个 sys 模块有一个名为 is_finalizing 跑步 help(sys.is_finalizing) 将导致

    >>> help(sys.is_finalizing)
    Help on built-in function is_finalizing in module sys:
    
    is_finalizing()
        Return True if Python is exiting.
    

    什么是 Python正在退出 ?[文件(https://docs.python.org/3/library/sys.html#sys.is_finalizing)这样说,

    sys.is_finalizing() 回来 True 如果Python解释器正在关闭 向下 False 否则

    我很不明白 Python解释器正在关闭 方法这是指在 exit 函数调用,如果是,有什么意义 sys.is_finalizing() 因为它总是回来 错误 ?。我试图了解在哪种情况下 sys.is_finalizing 回来 正确 在什么情况下这个API有用?

    0 回复  |  直到 3 年前
        1
  •  4
  •   sj95126    3 年前

    这不是大多数用户所需要的,但是 is_finalizing() True 当解释器关闭时,当它破坏对象、释放内存等时。知道解释器在对象 __del__() 方法可能会让对象决定是否执行某些操作。

    作为交互式会话中的快速显示:

    >>> import sys
    >>> class X:
    ...     def __del__(self):
    ...         print(f"__del__: is_finalizing = {sys.is_finalizing()}")
    ...
    >>> x = X()
    >>> del x
    __del__: is_finalizing = False
    >>>
    >>> x = X()
    >>> sys.is_finalizing()
    False
    >>> exit()
    __del__: is_finalizing = True
    

    请注意,根据 Python Data Model ,无法保证 __del__() 将被调用:

    不能保证 __del__() 方法是为解释器退出时仍然存在的对象调用的。

    (为了完整起见,请注意,该示例恰好显示了由于使用 del x ,但这种行为也不能保证。)