如何在终止进程的同时调用_uexit__;()?

2024-09-28 22:10:37 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的程序中,我使用__exit__()方法调用一个类作为来自from multiprocessing import Process的进程。当主程序中出现错误时,我会执行myprocess.terminate(),但这不会调用__exit__()方法

如何在终止进程的同时调用__exit__


补充: 我有两个进程,当1被一个sys.exit()终止时,我想退出其中的一个进程。 这是我现在做这件事的方法。在第1个进程中,我调用sys.exit(),witch“停用进程”。在主流程中,我有一个如下所示的循环:

while True:
    try:
        None
    except KeyboardInterrupt:
        accelerationrecorder1_process.terminate()
        datasaver_process.terminate()
        sys.exit()
    try:
        if datasaver_process.is_alive() == False:
            accelerationrecorder1_process.terminate()
            sys.exit()
    except:
        sys.exit()

    try:
        if accelerationrecorder1_process.is_alive() == False:
            datasaver_process.terminate()

            sys.exit()
    except:
        sys.exit()

但是如果我在一个进程中调用sys.exit(),另一个进程就不会执行退出


Tags: 方法程序falseif进程issysexit
1条回答
网友
1楼 · 发布于 2024-09-28 22:10:37

__exit__神奇的方法不是你想象的那样。它并不意味着在程序退出之前调用,而是在您离开with块之前调用Here了解更多有关该问题的详细信息

基本上,您不能有一个在进程终止时自动调用的方法。你必须手动调用它。但这仍然是可行的。可能在主函数的某个地方,您可以放置一个try语句来捕获应用程序的任何部分引发的任何异常(注意sys.exit()会引发一个SystemExit异常,该异常将像其他异常一样被捕获),并在try块中添加finally子句,在该子句中,每当程序终止时,都会调用所需的每个方法。例如:

def main():
  try:
    do_thing()
  except:
    log_error()
  finally:
    call_methods()

记住实现一个log_error函数(或使用任何现有函数),否则调试将非常困难

相关问题 更多 >