python - 保证在进程终止时调用销毁

标签 python python-3.x operating-system

在阅读了有关该主题的大量数据后,我仍然找不到任何实际解决我的问题的方法(可能没有)。

我的问题如下:

在我的项目中,我有多个驱动程序与各种硬件(IO 管理器、可编程负载、电源等)一起工作。

初始化与这些硬件的连接成本很高(及时),我无法在我们之间的每次通信迭代中打开然后关闭连接。

意思是我不能这样做(假设可编程负载实现进入/退出):

start of code...

with programmable_load(args) as program_instance:
     programmable_load_instance.do_something()

rest of code...

所以我选择了一个不同的解决方案:

class programmable_load():
    def __init__(self):
         self.handler = handler_creator()
    def close_connection(self):
         self.handler.close_connection()
         self.handler = None
    def __del__(self):
         if (self.handler != None):
             self.close_connection()

出于明显的原因,我不“相信”析构函数实际被调用,所以当我想结束我的程序(对于所有驱动程序)时,我显式调用 close_connection()。

当我突然终止进程时会出现问题,例如当我通过 Debug模式运行并退出调试时。

在这些情况下,进程终止而不运行任何析构函数。 我知道此时操作系统会清除所有未使用的内存,但是有什么方法可以有组织地清除内存吗?

如果不是,有没有办法让退出调试功能通过某组函数? python 进程是否知道它得到了一个相当调试的事件,还是将其视为正常终止?

操作系统:Windows

最佳答案

根据 this documentation :

If a process is terminated by TerminateProcess, all threads of the process are terminated immediately with no chance to run additional code.

(强调我的。)这意味着在这种情况下您无能为力。

详细here ,信号在 ms-windows 上效果不佳。

关于python - 保证在进程终止时调用销毁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50782326/

相关文章:

使用管道的 C 程序在尝试终止时挂起

c++ - 将 0 打印到文件是否安全?

Python:在模块和类之间共享全局变量

python - 如何模拟类并使用 pytest-mock 控制 py.test 中的返回值?

python-3.x - 我正在尝试在 python 3 中创建一个套接字,但我得到了这个错误,即使我从网上复制了代码 stragte

linux - 什么是抢占/什么是可抢占内核?到底有什么好处呢?

python - Python 中的两位数日期

python - 用于模型重定向的 django admin 自定义模板

python - 如何摆脱多个嵌套的 for 循环?

python - Devpi REST API - 如何检索包的版本