부모 프로세스가 종료 될 때 자식 프로세스 (루프가 실행되는 동안)를 닫으려고합니다. 자식 프로세스를 좀비 프로세스로 만들지 않으려면 (부모 프로세스가 클린 - 종료, 강제 종료 또는 예외로 인해 종료 될 때마다)부모 프로세스가 종료 될 때 While 루프 된 자식 프로세스를 종료 하시겠습니까?
저는 Arduino (직렬 사용)와 통신하는 게임을 만들고 있고, 주 프로세스는 Panda3D의 ShowBase 인스턴스 (게임 엔진, 렌더링 및 다른 많은 작업)를 실행하므로 주를 중지하면 안됩니다. ,
그래서, 나는. 시리얼 기다려야 정지에서 주요 프로세스가 안전하도록 멀티 모듈을 사용하여
을 하위 프로세스를 생성하지만 Panda3D를 창을 닫을 때 문제는, sys.exit 호출한다() 또는 때문에 예외 종료 주 프로세스가 즉시 종료되고 하위 프로세스에 연결하거나 거짓을 줄 수 없으므로 하위 프로세스가 좀비가됩니다.
나는 이것을 어떻게 해결해야할지 모르겠다. 예상대로 작동하도록하려면 어떻게해야합니까?
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from multiprocessing import Process, Queue
from panda3d.core import *
class HW_support:
def hardware_event_handler(self, process_status):
self.process_alive = True
while self.process_alive:
print('Working!')
self.process_alive = process_status.get()
return
if __name__ == '__main__':
from direct.showbase.ShowBase import ShowBase
import sys
class TestApp(ShowBase):
def __init__(self):
ShowBase.__init__(self)
self.process_status_argv = Queue()
self.HW_sub_process = Process(target = HW_support().hardware_event_handler, args=(self.process_status_argv,))
self.HW_sub_process.start()
base.messenger.toggleVerbose()
taskMgr.add(self.task_make_alive, 'task_make_alive')
base.accept('escape', self.exit_taskloop)
def exit_taskloop(self, task=None):
taskMgr.stop()
def task_make_alive(self, task=None):
self.process_status_argv.put(True)
return task.cont
app = TestApp()
app.run()
#app.HW_sub_process.join()
app.process_status_argv.put(False)
이것은 매우 흥미로운 아이디어입니다 ... 지금 바로 시도해 볼게요, 고마워요! –
상단의 블록으로'if __name__ == "__main __"'이 또한 작동 할 것이라고 생각합니다 ... 나는 방금 if 블록의 목적이 무엇인지 매우 분명히하고 싶었습니다. –
이것은 작동합니다! 그리고 당신이 말했듯이, 그것을 __name__ == "__main__"에 넣으면 더 좋을 것입니다. (JUST IN CASE) 어쨌든, 고마워요! –