关闭wxPython wind时Python watchdog不会终止

2024-10-03 17:18:13 发布

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

我有一个应用程序,它包含一个wxpythongui,它在初始化时启动一个watchdog观察器和一个python进程。在

class MonitorApp(wx.App):
    def __init__(self):
        wx.App.__init__(self, True, 'monitor_stderr.log', False, False)

        self.q = Queue()
        self.m = Queue()
        self.e = Queue()

        monitor_handler = DirectoryMonitorHandler(self.q)
        self.folder_monitor = polling.PollingObserver()
        self.folder_monitor.schedule(monitor_handler, source, recursive = True)
        self.folder_monitor.start()

        self.backlog_manager = BacklogManager(self.q, self.m, self.e)
        self.backlog_manager.start()

我要通过这个关闭wxPython窗口wx.TaskBarIcon公司回调方法:

^{pr2}$

其中DestroyChildProcess是:

def DestroyChildProcess(self):
    self.folder_monitor.stop()
    self.folder_monitor.join()
    self.backlog_manager.terminate()

注意,BacklogManager是一个多处理进程子类。我遇到的问题是,当我关闭wxpythongui窗口时,我仍然看到两个窗口pythonw.exeWindows任务管理器中的进程。有三种可能性:

  1. 我没有正确终止GUI进程。(不确定是否为过程)
  2. 我没有正确终止看门狗观察者。在
  3. 我没有正确终止backlog_manager进程。在

从玩弄代码的角度来看,它显示出了调用“self.backlog_经理.terminate()”似乎工作正常,只留下一个pythonw.exe跑步。在

有没有办法让我终止或停止一切pythonw.exe正确处理?我做错什么了?在

编辑-经过进一步的调查,这可能是我用来启动python脚本的.bat脚本的问题。我基本上是在使用pythonw.exe启动/B以隐藏命令行窗口。在

cd %~dp0
START /B .\Modules\statusWindow.pyw

当我以以下内容开始脚本时:

cd %~dp0
.\Modules\statusWindow.py

关闭命令行窗口时,所有windows任务管理器进程都将结束。我怀疑这可能是pythonw.exe或者我结束这个过程的方式。在


Tags: self脚本appqueue进程initdefmanager
1条回答
网友
1楼 · 发布于 2024-10-03 17:18:13

在windows上,我知道terminate最多也不可靠

class BacklogManager(multiprocessing.Process):
     _should_exit = multiprocessing.Value("b",0)
     def terminate(self):
         self._should_exit.value = 1
     def run(self):
        #instead of while True
        while not self._should_exit.value:
             do_work()

这将导致它在调用terminate时正确退出(或者直接设置变量)

相关问题 更多 >