Como você pode garantir o funcionamento atexit registrada será executado com AppHelper.runEventLoop () in PyObjC?
Pergunta
Eu só estou perguntando por que eu o meu registou uma função atexit ... por exemplo.
import atexit
atexit.register(somefunc)
...
AppHelper.runEventLoop()
É claro que eu sei quando vai atexit
não vai funcionar. Quando eu comentar AppHelper.runEventLoop()
a função atexit
é chamado. Eu também consultei meu ovo pyobjc
, e vi debaixo __init__.py
sob pacote objc
o seguinte código:
import atexit
atexit.register(recycleAutoreleasePool)
Eu olhei para qualquer referência dentro do ovo sem sucesso. Eu também tentei em torno de um AppHelper.runEventLoop()
try-finally desembolsar ao redor, e os comandos no bloco finally não será chamado.
Hope alguém poderia me ajudar aqui.
P.S. Supondo que eu não quero usar o método applicationShouldTerminate:
do delegado aplicação ...
Solução
Eu acredito que você faz delegados necessidade, porque caso contrário o ciclo de eventos pode sair do processo de forma abrupta (tipo como os._exit
) e, portanto, não dar o Python runtime uma chance para executar o código de terminação tais como cláusulas finally
, funções atexit
, etc etc .