Come si può garantire registrato atexit funzione esegue con AppHelper.runEventLoop() in PyObjC?
Domanda
Mi chiedo solo perché ho i miei registrato una funzione atexit...ad es.
import atexit
atexit.register(somefunc)
...
AppHelper.runEventLoop()
Naturalmente so che quando si atexit
non funziona.Quando io commento AppHelper.runEventLoop()
il atexit
la funzione viene chiamata.Ho anche visto il mio pyobjc
uovo, e ho visto sotto __init__.py
sotto objc
pacchetto il seguente codice:
import atexit
atexit.register(recycleAutoreleasePool)
Ho guardato per qualsiasi riferimento all'interno dell'uovo senza alcun risultato.Ho anche provato circostante un try-finally guscio intorno AppHelper.runEventLoop()
, e i comandi del blocco finally non chiamato.
Spero che qualcuno mi possa aiutare qui.
P. S.Supponendo che non voglio usare l'Applicazione delegato applicationShouldTerminate:
metodo di...
Soluzione
Credo che hai bisogno di delegati, perché altrimenti il ciclo di eventi può uscire dal processo piuttosto bruscamente (un po ' come os._exit
- )) e quindi non dare il Python runtime la possibilità di eseguire il codice di terminazione come finally
clausole, atexit
funzioni, etc etc.