2009-08-10 33 views
1

我只是想知道爲什麼我註冊了一個atexit函數...例如如何確保註冊的atexit函數能夠在PyObjC的AppHelper.runEventLoop()中運行?

import atexit 
atexit.register(somefunc) 
... 
AppHelper.runEventLoop() 

當然,我知道什麼時候atexit將無法​​正常工作。當我註釋掉AppHelper.runEventLoop()時,會調用atexit函數。我也瀏覽我的pyobjc雞蛋,我__init__.py下看了下objc包下面的代碼:

import atexit 
atexit.register(recycleAutoreleasePool) 

我尋找無果蛋內的任何引用。我也嘗試圍繞一個圍繞AppHelper.runEventLoop()的try-finally shell,並且finally塊中的命令不會被調用。

希望有人能幫助我在這裏。

P.S.假設我不想使用應用程序代理的方法applicationShouldTerminate: ...

回答

1

我相信你確實需要委託,因爲否則事件循環可以退出過程相當突然(有點像os._exit),因此不會給Python運行時運行終止代碼的機會,例如finally條款,atexit函數等等。

相關問題