我有一个使用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)
有没有办法跟踪卡住的流程并重新运行它们?
答案 0 :(得分:1)
如果您倾向于使用多处理,请实施ping机制。您正在寻找因I / O速度慢而陷入困境的流程,我认为?
我个人会选择一个队列(不一定是队列服务器),例如~/jobs
是要处理的URL列表,然后有一个程序接受第一个工作并执行它。那么这只是一个记账的问题 - 比如,程序在启动时记录它的PID是什么。如果您需要杀死慢速作业,只需终止PID并将作业标记为失败。
答案 1 :(得分:0)
Google for urllib2 and timeout。如果达到超时,则会出现异常,并且该进程不再被卡住。