¿Cómo se puede asegurar la función atexit registrada se ejecutará con AppHelper.runEventLoop () en PyObjC?

StackOverflow https://stackoverflow.com/questions/1255025

  •  12-09-2019
  •  | 
  •  

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 ...

¿Fue útil?

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. .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top