监视卡住的python进程

时间:2011-08-11 17:53:31

标签: python urllib2 multiprocessing

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

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

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

pool = Pool(processes=5)
pool.apply_async(getData, )

以下是执行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)

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

2 个答案:

答案 0 :(得分:1)

如果您倾向于使用多处理,请实施ping机制。您正在寻找因I / O速度慢而陷入困境的流程,我认为?

我个人会选择一个队列(不一定是队列服务器),例如~/jobs是要处理的URL列表,然后有一个程序接受第一个工作并执行它。那么这只是一个记账的问题 - 比如,程序在启动时记录它的PID是什么。如果您需要杀死慢速作业,只需终止PID并将作业标记为失败。

答案 1 :(得分:0)

Google for urllib2 and timeout。如果达到超时,则会出现异常,并且该进程不再被卡住。

相关问题