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?
我必须确保 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?