Python: 如何让函数运行在程序结束的时候无条件的?

Python: How to make the function run unconditionally when the program ends?

我必须确保 end_event() 函数在程序结束时执行。我试图将此实现为 Python 的 atexit。但是,用PyInstaller把.py文件转成exe文件,点击关闭后,就不行了。如果您能告诉我一个始终有效的解决方案,我将不胜感激。祝你有个美好的一天。

import atexit
import signal
import pyupbit

def end_event():
    for keys in buy_list.keys():
        order = upbit.get_order(keys)
        if "state" in order:
            if(order['state'] == 'wait'):
                upbit.cancel_order(keys)
    exit(1)

atexit.register(end_event)
signal.signal(signal.SIGINT, end_event)

无法保证进程退出时代码会 运行,因为有一些退出方法不允许任何代码 运行。

  • 用户可以拉电源线。没有代码可以运行因为没有动力
  • 外部事件(停电、雷击),同上
  • Kill -9 或等价物,例如Windows' TerminateProcess

紧急清理模式。

最好的模式是:永远不要处于需要紧急清理的状态。

  • 不能保证您的清理会 运行 因为您可能会遇到 kill -9 或停电。
  • 因此您需要能够在那种情况下恢复。

另请参阅:What does the POSIX standard say about thread stacks in atexit() handlers? What's the OS practice?