【发布时间】: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 兆字节的内存?这并不重要。
标签: python urllib2 multiprocessing