【问题标题】:How to terminate python.exe*32 process when I exit my application?退出应用程序时如何终止 python.exe*32 进程?
【发布时间】:2014-01-06 08:02:00
【问题描述】:

我在 Windows 7 下使用 wxpython GUI 编写了一个 python (2.7) 应用程序。当我运行该应用程序时,我看到一个 python.exe*32 进程在任务管理器中启动。当我退出应用程序时(使用 wxpython 的Window.Close() 方法关闭 GUI 窗口),python.exe*32 进程仍然存在。当我再次运行该应用程序时,第二个 python.exe*32 进程启动,它继续运行。每个python.exe*32 进程占用大约 180 MB 内存,并且会降低计算机速度。

我以这种方式启动我的应用程序:

if __name__ == "__main__":
    app = wx.App(False)
    frame = MainWindow("MyApp")
    frame.Show()
    app.MainLoop() 

当我退出我的应用程序时,如何使python.exe*32 进程终止?

【问题讨论】:

  • 出于好奇,您如何启动您的python 应用程序? (sys.exit(1) 应该终止所有子进程和父进程)
  • 请看我的问题,我更新了。
  • 我想,你如何启动整个python代码,比如:“python whambam.py”或者?
  • 我使用 Eclipse 和 PyDev,然后单击工具栏上的“运行”按钮。
  • 你有它。试试看sys.exit(1) 是否终止父进程。如果不尝试os._exit(1)(我之所以这么说是因为我不知道 Eclipse 如何启动它的子进程 python.exe*32 :) 而且如果您的应用程序中有任何线程,请务必终止/停止它们.并将sys.exit(1) 放在app.MainLoop() 之后,并通过在app.MainLoop()sys.exit(1) 之间插入print("moo") 来确保app 正确退出

标签: python windows memory process


【解决方案1】:

在代码末尾添加sys.exit(1),这将为父进程提供一个返回码,该码应该终止作为 Python 的父进程。

注意: 如果您有单独运行的线程,请不要将sys.exit(1) 放在 GUI“关闭”功能之后,这将导致数据丢失并“搞砸”打开的套接字(如果您有任何这些)。

这是正确的做法:

class MainWindow(wx.Frame):
    def __init__(self, title):
        wx.Frame.__init__(self, None, title=title, pos=(150,150), size=(350,200))
        self.Bind(wx.EVT_CLOSE, self.OnClose)

    def OnClose(self, event):
        self.Destroy() # or simply do sys.exit(1) here
if __name__ == "__main__":
    app = wx.App(False)
    frame = MainWindow("MyApp")
    frame.Show()
    app.MainLoop()
sys.exit(1)

【讨论】:

  • 请告诉我如何在单击应用程序窗口右上角的“X”按钮时杀死 python.exe*32,因为当我单击“X”时,应用程序窗口会关闭,但 python.exe*32 进程仍保留在任务管理器中
  • 但你很难过它奏效了?工作 == 进程终止,您是否尝试过 sys.exit(1)os._exit(1) 并且它们都没有终止进程?
  • 当我在应用程序的“文件”菜单中使用“退出”菜单项时它可以工作,因为我将 sys.exit() 添加到“退出”的绑定函数中。但是没有函数绑定“X”按钮,因此它不会调用 sys.exit()
  • 逻辑思考一下,如果“退出”菜单项有效,因为它将执行sys.exit(1),但关闭按钮没有,那是因为关闭按钮在没有调用关闭的情况下终止了 GUI您仅注册到“退出”菜单项的功能。 因为我多次伤心 不要将sys.exit(1) 放在退出按钮上,将其放在之后 app.MainLoop() 以便您在任何给定时间调用sys.exit(1) GUI 关闭/退出/折叠。
  • 我必须收回它,它有效,非常感谢,最好的问候
猜你喜欢
  • 1970-01-01
  • 2012-04-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-19
  • 2017-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多