python多进程问题

python多进程问题

在程序里我开了5个进程,分别来运行5个不同的程序,每个程序的运行时间比较长,现在有个问题是:
通过什么办法能够观察到每个进程的运行情况?如果某个进程由于某种原因而终止了,如何将这个情况发现并通知用户??
可以在运行中输出一些日志,也可以try...except捕获下异常,通知用户。

简单的就可以这么做了。
子进城死掉的时候父进城会收到一个SIGCHILD信号
捕捉一下就行了
这办法在windows下不灵


[Copy to clipboard] [ - ]
CODE:
.....
for i in range(5):
    try:
        childPid = os.fork()
        if childPid != 0:
            program()
    except:
        print 'error ocurred at: ',childPid
.....

这个样子?我的想法是记下5个进程的进程号,然后每过一段时间就判断一下这5个进程号是不是在内存里。如果有不在内存里的,就表明那个进程异常退出或者正常结束了。如果这样可行的话,又不知道怎么样实现它。。。。。
能否提供一点资料。。。
或者给出主要的代码。。。
subprocess模块有个Popen.poll()可以检查子进程是否结束。据说windows下也可以不过我没用过
Popen.poll()¶
    Check if child process has terminated. Set and return returncode attribute.


过一段时间就判断一下这5个进程号是不是在内存里,其实可以直接补货ps的输出就可以了


QUOTE:
原帖由 blamos 于 2008-11-4 10:09 发表

.....
for i in range(5):
    try:
        childPid = os.fork()
        if childPid != 0:
            program()
    except:
        print 'error ocurred at: ',childPid
.....

这个样子? ...

你说的办法可行
只要给子进城发个SIGCHLD信号并检查返回值

[Copy to clipboard] [ - ]
CODE:
import os,signal

try:
        os.kill(12345,signal.SIGCHLD)              #你的系统里不会刚好就有12345这个进城吧。。。。
except OSError,err:
        print err.errno                             #如果是3的话说明死球了
        print err.strerror

不过这些都不是王道
不能在windows下用
偶的开发环境是Linux + python 2.5
多线程有个函数isAlive()可以检查该线程是否还在运行。进程好像没有。。。


QUOTE:
原帖由 blamos 于 2008-11-4 10:56 发表
偶的开发环境是Linux + python 2.5
多线程有个函数isAlive()可以检查该线程是否还在运行。进程好像没有。。。

不是说了个办法么还贴了代码