1

我正在开发一个使用多个进程的应用程序。

每个进程都是由原始 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 线程,我需要设置一些特殊的东西,还是这不可能?

我知道我可能会在单独的子进程中运行终止代码,因为进程列表是在分叉前创建的。但是,从设计的角度来看,在主进程中拥有该代码会更加清晰。

这并不容易,因为收割进程必须是它希望查询或终止的任何子进程的父进程。)

4

1 回答 1

0

I'm pretty sure you'll need to keep the wx main loop as the main process and start the multiprocess stuff from within a thread. Thus, you get to mix threads and the multiprocessing module.

Check out the following resources:

于 2013-07-15T13:35:05.193 回答