親プロセスが終了したときに子プロセス(ループ中)を終了しようとしています。子プロセスをゾンビプロセスにしないために、親プロセスがクリーン終了、強制終了、または例外のために終了するたびに終了します。親プロセスが終了したときにwhile-looped子プロセスを終了しますか?
(シリアルを使用して)Arduinoと通信するゲームを作成しています。メインプロセスはPanda3DのShowBaseインスタンス(ゲームエンジン、レンダリングなど)を実行していますので、メインを停止しないでください。 、
だから、私は。シリアル待つために停止からメインプロセスが安全であるように、マルチプロセッシングモジュールを使用して
をサブプロセスを作成しましたが、私はPanda3Dウィンドウを閉じる際の問題は、sys.exitを呼び出している()または例外のため終了しましたメインプロセスは即座に終了し、サブプロセスに参加することもfalseにすることもできないため、サブプロセスはゾンビになります。
これを解決する方法はわかりません。私は期待どおりに動作させるために何をすべきですか?
#!/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__"ならばそれを置くのが良いでしょう。(ちょっとした事件のため)とにかく、ありがとう! –