有没有什么办法在对象销毁时调用我的析构函数?
def __del__(self):
os.unlink(self.pidfile)
场景:有一个在运行进程的守护进程。当守护进程收到 SIGTERM 信号时,会立即将该信号发送给进程。此时进程会停止执行且不会调用 __del__
方法。
有没有什么办法在对象销毁时调用我的析构函数?
def __del__(self):
os.unlink(self.pidfile)
场景:有一个在运行进程的守护进程。当守护进程收到 SIGTERM 信号时,会立即将该信号发送给进程。此时进程会停止执行且不会调用 __del__
方法。
__exit__
方法并使用with语句是“析构”对象的首选方式。这样更加明确和可预测。with
语句,如果收到SIGTERM信号,也不能保证完全销毁您的对象。为了在接收到信号时执行某些操作,您需要添加信号处理程序。import signal
import sys
def handle_signal(signum, frame):
print('Got signal')
# Do some cleanup
sys.exit(signum) # Maybe ???
signal.signal(signal.SIGTERM, handle_signal)
del your_object
,但即使如此,如果程序中仍然存在对该对象的引用(请参阅__del__文档),也不能保证调用__del__
方法。__exit__
清理代码。 - Kevin
__del__()
。然后设置一个SIGTERM
的信号处理程序,该处理程序会引发异常,with
语句可以做出响应。 - Kevin__exit__
和finally
块默认情况下也不会运行。 - user2357112