Как вы можете гарантировать, что зарегистрированная функция atexit будет работать с AppHelper.runEventLoop () в PyObjC? - PullRequest
1 голос
/ 10 августа 2009

Мне просто интересно, почему я зарегистрировал функцию atexit ... например,

import atexit
atexit.register(somefunc)
...
AppHelper.runEventLoop()

Конечно, я знаю, когда atexit не будет работать. Когда я комментирую AppHelper.runEventLoop(), вызывается функция atexit. Я также просмотрел мое pyobjc яйцо и увидел под __init__.py под objc package следующий код:

import atexit
atexit.register(recycleAutoreleasePool)

Я искал любую ссылку в яйце безрезультатно. Я также попытался окружить оболочку try-finally вокруг AppHelper.runEventLoop(), и команды в блоке finally не будут вызваны.

Надеюсь, кто-нибудь может мне помочь.

P.S. Предполагая, что я не хочу использовать метод делегата приложения applicationShouldTerminate: ...

1 Ответ

1 голос
/ 10 августа 2009

Я полагаю, что вам действительно нужны делегаты, потому что в противном случае цикл обработки событий может довольно быстро выйти из процесса (вроде * os._exit) и, следовательно, не дать Python-среде выполнения шанс запустить код завершения, такой как finally выражения, atexit функции и т. Д. И т. Д.

...