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

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

  •  12-09-2019
  •  | 
  •  

Вопрос

Мне просто интересно, почему я зарегистрировал функцию 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: метод...

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top