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

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

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

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

import atexit
atexit.register(recycleAutoreleasePool)

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

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

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


person jopes    schedule 10.08.2009    source источник


Ответы (1)


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

person Alex Martelli    schedule 10.08.2009