wxPython GUI가 포함되어있어 초기화시 워치 독 옵저버 및 파이썬 프로세스를 시작하는 앱이 있습니다.wxPython 창을 닫을 때 파이썬 워치 독이 종료되지 않습니다.
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()
나는이 wx.TaskBarIcon 콜백 메소드를 통해 wxPython에 창을 닫는 오전 :
def onClickExit(self, event):
app.keepGoing = False
app.DestroyChildProcess()
self.RemoveIcon()
self.Destroy()
self.frame.Destroy()
을 DestroyChildProcess은 여기서 BacklogManager는 멀티 프로세스 서브 클래스입니다
def DestroyChildProcess(self):
self.folder_monitor.stop()
self.folder_monitor.join()
self.backlog_manager.terminate()
참고. 내가 가지고있는 문제는 wxPython GUI 창을 닫을 때 Windows 작업 관리자에서 두 개의 pythonw.exe 프로세스를 계속 볼 수 있다는 것입니다. 다음과 같은 세 가지 가능성이 있습니다.
- GUI 프로세스가 올바르게 종료되지 않습니다. (프로세스인지 확실하지 않음)
- 감시 관찰자를 올바르게 종료하지 않습니다.
- backlog_manager 프로세스를 올바르게 종료하지 않습니다.
"self.backlog_manager.terminate()"는 pythonw.exe 인스턴스가 하나만 실행되도록하고 올바르게 작동하는 것처럼 보입니다.
내가 모든 pythonw.exe 프로세스를 올바르게 종료하거나 종료 할 수있는 방법이 있습니까? 내가 도대체 뭘 잘못하고있는 겁니까?
편집 - 추가 조사를 통해 내 파이썬 스크립트를 시작하기 위해 사용하고있는 .bat 스크립트의 문제 일 수 있습니다. 기본적으로 pythonw.exe 및 START/B를 사용하여 명령 줄 창을 숨길 수 있습니다.
cd %~dp0
START /B .\Modules\statusWindow.pyw
그것은 보인다 나는 다음으로 스크립트를 시작할 때 :
cd %~dp0
.\Modules\statusWindow.py
내가 명령 줄 창을 닫습니다
, 모든 Windows 작업 관리자의 프로세스 끝. 나는 이것이 pythonw.exe 또는 프로세스를 끝내는 방식의 문제 일 가능성이 있다고 생각합니다. 창에