Comment pouvez-vous assurer la fonction atexit enregistrée fonctionnera avec AppHelper.runEventLoop () dans PyObjC?
Question
Je me demande pourquoi je me enregistré une fonction atexit ... par exemple.
import atexit
atexit.register(somefunc)
...
AppHelper.runEventLoop()
Bien sûr, je sais quand sera atexit
ne fonctionnera pas. Quand je commente sur AppHelper.runEventLoop()
la fonction atexit
est appelée. J'ai aussi mon oeuf parcouru pyobjc
, et je vis sous __init__.py
sous paquet objc
le code suivant:
import atexit
atexit.register(recycleAutoreleasePool)
Je l'ai cherché toute référence dans l'œuf en vain. J'ai aussi essayé entourant une coquille try-finally autour AppHelper.runEventLoop()
, et les commandes du bloc finally ne me appelé.
quelqu'un Hope pourrait me aider.
P.S. En supposant que je ne veux pas utiliser la méthode de applicationShouldTerminate:
du délégué de l'application ...
La solution
Je crois que vous avez besoin des délégués, car sinon la boucle d'événement peut quitter le processus assez brusquement (un peu comme os._exit
) et donc ne pas donner le temps d'exécution Python une chance d'exécuter du code de terminaison telles que les clauses de finally
, les fonctions de atexit
, etc etc .