我正在开发一个使用多个进程的应用程序。
每个进程都是由原始 python 进程创建的(即,涉及一个级别的分叉)。
为了在子进程死亡的情况下优雅地终止,我希望我的主进程监视每个子进程的状态,例如:
while lifeIsGood:
for process in processes:
if not process.is_alive()
lifeIsGood = False
break
sleep(1)
# forcibly reap the children
我还希望这个应用程序提供一个 wxpython GUI。但是,由于我希望主进程执行的操作,我无法App.MainLoop
在该进程中进行阻塞调用。
我提出的解决方案是在分叉后在App.MainLoop
子进程(子类)的线程中运行。Process
但是,这会导致 GUI 灰显(无响应)。
为了从子进程(post-fork)运行 GUI 线程,我需要设置一些特殊的东西,还是这不可能?
(我知道我可能会在单独的子进程中运行终止代码,因为进程列表是在分叉前创建的。但是,从设计的角度来看,在主进程中拥有该代码会更加清晰。
这并不容易,因为收割进程必须是它希望查询或终止的任何子进程的父进程。)