【发布时间】:2018-11-19 19:04:30
【问题描述】:
在阅读了有关该主题的大量数据后,我仍然找不到任何实际解决方案来解决我的问题(可能没有)。
我的问题如下:
在我的项目中,我有多个驱动程序与各种硬件(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()。
当我突然终止进程时会出现问题,例如当我通过调试模式运行并退出调试时。
在这些情况下,进程会在不运行任何析构函数的情况下终止。 我知道操作系统会在此时清除所有未使用的内存,但是有没有办法以有组织的方式清除内存?
如果没有,有没有办法让退出调试功能通过某组功能? python 进程是否知道它得到了一个相当调试的事件,或者它是否将其视为正常终止?
操作系统:Windows
【问题讨论】:
-
即使在调试会话停止时也要进行清理吗?
-
@AzatIbrakov 我希望在每次进程终止时都使用它,但在调试会话停止时也很好。
-
不知道调试会话,但看看
atexitmodule -
在哪个操作系统上?我认为您可以在 Unix 上使用信号陷阱。
-
将你的程序一分为二:一个进程将管理物理连接并充当代理,另一个是你的程序逻辑。这样,一旦你的逻辑进程被杀死,comm.经理将能够检测到这一点并优雅地退出。
标签: python python-3.x operating-system