监控卡住的python进程
Posted
技术标签:
【中文标题】监控卡住的python进程【英文标题】:monitor stuck python processes 【发布时间】:2011-10-25 05:24:19 【问题描述】:我有一个使用 urllib2 执行 URL 请求的 python 脚本。我有一个由 5 个进程组成的池,它们异步运行并执行一个功能。该函数是进行 url 调用、获取数据、将其解析为所需格式、执行计算和插入数据的函数。每个 url 请求的数据量各不相同。
我使用 cron 作业每 5 分钟运行一次此脚本。有时当我执行ps -ef | grep python
时,我会看到卡住的进程。有没有一种方法可以让我跟踪多处理类中的进程含义,该类可以跟踪进程、它们的状态含义已完成、卡住或死亡等?这是一个代码sn-p:
这就是我调用异步进程的方式
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)
有没有办法跟踪卡住的进程并重新运行它们?
【问题讨论】:
“卡住了?”你能解释一下这是什么意思吗? 为什么需要使用multiproccesing
运行它们?使用多个 cron 作业有什么问题?
@Andrew:卡住是指挂起的进程。
@Nick:多处理的唯一原因是充分利用盒子。
使用进程而不是线程会消耗多少,每个进程需要 2 兆字节的内存?这并不重要。
【参考方案1】:
如果您倾向于使用多处理,请实施 ping 机制。我想您正在寻找因 I/O 速度慢而卡住的进程?
我个人会使用队列(不一定是队列服务器),例如~/jobs
是要处理的 URL 列表,然后有一个程序来处理第一个工作和执行它。然后这只是一个簿记问题 - 比如说,让程序记录它何时启动以及它的 PID 是什么。如果您需要终止慢速作业,只需终止 PID 并将作业标记为失败。
【讨论】:
【参考方案2】:Google 获取 urllib2 和超时。如果达到超时,您将得到一个异常,并且该进程不再卡住。
【讨论】:
以上是关于监控卡住的python进程的主要内容,如果未能解决你的问题,请参考以下文章