【问题标题】:Exiting Python interpreter without running garbage collection退出 Python 解释器而不运行垃圾回收
【发布时间】:2013-01-08 03:38:17
【问题描述】:

在我的程序结束时,实际上不需要发生任何事情,CPython 3.2 解释器会花费近 2 分钟来进行垃圾收集。这是一个known issue

幸运的是,就我而言,在程序结束之前我不需要进行任何垃圾收集。因此,我只需要找到一种方法在程序完成后退出程序,而不给gc.collect()运行的机会。

在 Windows 上按“CTRL+C”似乎可以做到这一点。我想我还可以找到 python 解释器的进程 ID,并使用操作系统调用将其杀死。

有没有办法使用纯 Python(可能是异常或标准库调用)实现相同的效果,希望与平台无关?

【问题讨论】:

    标签: python python-3.x garbage-collection interrupt


    【解决方案1】:
    import os
    os._exit(0)
    

    不鼓励这样做,因为析构函数可以执行一些有用的操作。如果您确定不需要运行这些析构函数,这应该可以。

    【讨论】:

    • 这是完美的。使用它时我应该注意哪些类型的事情?我希望操作系统仍然会释放文件句柄和网络连接,即使它们的析构函数没有运行?
    • @max:操作系统应该能够执行系统资源的清理。您可能更担心的是应用程序的东西。例如,如果您的应用程序正在尝试执行某种多步文件操作,而您在中间将其切断,则文件可能不会处于一致状态。
    • 使用atexit(由您或您正在使用的库)注册的例程将不会在您使用_exit 时运行。
    • 哦,我刚刚在文档中读到 stdio 缓冲区不会被刷新。只要我意识到这一点,就很容易处理。
    • 警告,这也会跳过刷新标准输出。我花了很长时间才弄清楚为什么我的脚本可以很好地写入终端,但在重定向到文件或通过管道传输到另一个程序时却没有……
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多