Python程序监视自身退出

本文介绍如何在SAE上实现应用代码的无缝更新,并利用Python的atexit模块来执行服务重启前的持久化操作。通过注册清理函数,确保在服务重启时能够完成必要的数据保存工作。

SAE上更新代码时,服务都可以无缝切换,无需人工重启服务

那么,怎么能够在服务重启前进行持久化操作呢

需要监视服务何时重启

python提供了一个绑定程序退出时处理函数的功能[参考]:

atexit.register(func[, *args[, **kargs]])

程序结束,如调用sys.exit() 或者主模块执行结束时,就会执行注册的clean functions

def goodbye():
    print 'Bye...'

atexit.register(goodbye)

需要注意的是,可以重复注册相同的clean functions,这可能是我们不希望的,以下方法可以防止重复注册:

def goodbye():
    print 'Bye...'

for idx, handler in enumerate(atexit._exithandlers):
    if handler[0].func_name == 'goodbye':
        del atexit._exithandlers[idx]
        break

atexit.register(goodbye)
print atexit._exithandlers

 Jun 27th, 2013  python

原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0

在 Windows 中,可以使用 `win32gui` 模块中的函数来监视并处理窗口消息。具体来说,要监视一个窗口是否收到 `WM_CLOSE` 消息,可以使用以下步骤: 1. 使用 `win32gui.FindWindow()` 函数查找要监视的窗口的句柄。如果窗口句柄已知,则可以直接使用该句柄,否则需要根据窗口的标题或类名等信息来查找窗口句柄。 2. 使用 `win32gui.SetWindowLong()` 函数设置窗口过程函数。窗口过程函数是一个回调函数,用于处理窗口消息。在本例中,需要监视 `WM_CLOSE` 消息,因此需要在窗口过程函数中处理该消息。 3. 在窗口过程函数中处理 `WM_CLOSE` 消息。当窗口收到 `WM_CLOSE` 消息时,可以执行一些操作,例如退出程序。 以下是一个简单的示例代码,可以监视自身窗口是否收到 `WM_CLOSE` 消息: ```python import win32api import win32con import win32gui # 窗口过程函数 def wndProc(hwnd, msg, wParam, lParam): if msg == win32con.WM_CLOSE: # 窗口收到 WM_CLOSE 消息,执行退出操作 win32api.PostQuitMessage(0) return win32gui.DefWindowProc(hwnd, msg, wParam, lParam) # 创建窗口 win32gui.InitCommonControls() hwnd = win32gui.CreateWindow("BUTTON", "My Window", 0, 0, 0, 0, 0, 0, 0, None, None, None) # 设置窗口过程函数 oldWndProc = win32gui.SetWindowLong(hwnd, win32con.GWL_WNDPROC, wndProc) # 进入消息循环,等待窗口消息 while True: msg = win32gui.GetMessage(None, 0, 0) if msg == 0: break win32gui.TranslateMessage(msg) win32gui.DispatchMessage(msg) ``` 在这个示例中,我们创建一个简单的窗口,并在窗口过程函数中处理 `WM_CLOSE` 消息。在消息循环中,我们使用 `GetMessage()` 函数获取窗口消息,如果收到 `WM_QUIT` 消息,就退出消息循环。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值