监视卡住的python进程

ash*_*ash 5 python urllib2 multiprocessing

我有一个python脚本,使用urllib2执行URL请求.我有一个由5个进程组成的池,它们异步运行并执行一个函数.此函数是使url调用,获取数据,将其解析为所需格式,执行计算和插入数据的函数.每个网址请求的数据量各不相同.

我使用cron作业每5分钟运行一次这个脚本.有时当我这样做时ps -ef | grep python,我看到卡住的过程.有没有办法可以跟踪多处理类中的进程意义,这些进程可以跟踪进程,状态意义是否已完成,卡住或死亡等等?这是一段代码:

这就是我称之为异步进程的方式

pool = Pool(processes=5)
pool.apply_async(getData, )
Run Code Online (Sandbox Code Playgroud)

以下是执行urllib2请求的getData的一部分:

try:
    Url = "http://gotodatasite.com"

    data = urllib2.urlopen(Url).read().split('\n')
except URLError, e:
    print "Error:",e.code
    print e.reason
    sys.exit(0)
Run Code Online (Sandbox Code Playgroud)

有没有办法跟踪卡住的流程并重新运行它们?

ler*_*son 1

如果您非常倾向于使用多处理,请实现 ping 机制。我想您正在寻找因 I/O 缓慢而卡住的进程?

就我个人而言,我会使用队列(不一定是队列服务器),例如~/jobs要处理的 URL 列表,然后有一个程序接受第一个作业并执行它。那么这只是一个簿记问题 - 比如说,让程序记录它何时启动以及它的 PID 是什么。如果您需要终止缓慢的作业,只需终止 PID 并将作业标记为失败即可。