¿Cómo se puede asegurar la función atexit registrada se ejecutará con AppHelper.runEventLoop () en PyObjC?
Pregunta
Me pregunto por qué mi registrada una función atexit ... por ejemplo.
import atexit
atexit.register(somefunc)
...
AppHelper.runEventLoop()
Por supuesto que sé cuando va a atexit
no va a funcionar. Cuando comento hacia fuera AppHelper.runEventLoop()
la función atexit
se llama. También me levantase mi huevo pyobjc
, y vi debajo __init__.py
bajo el paquete de objc
el siguiente código:
import atexit
atexit.register(recycleAutoreleasePool)
busqué cualquier referencia dentro del huevo en vano. Yo también probamos que rodea a un try-finally capa alrededor AppHelper.runEventLoop()
, y los comandos en el bloque finally no será llamado.
espero que alguien me podría ayudar aquí.
P.S. Suponiendo que no desea utilizar el método de applicationShouldTerminate:
delegado de aplicaciones ...
Solución
Creo que usted no necesita delegados, porque de lo contrario el bucle de eventos puede salir del proceso de forma bastante abrupta (algo así como os._exit
) y por lo tanto no da el tiempo de ejecución de Python la oportunidad de ejecutar código de terminación, tales como cláusulas finally
, funciones atexit
, etc, etc. .