【问题标题】:monitor stuck python processes监控卡住的python进程
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    Google 获取 urllib2 和超时。如果达到超时,您将得到一个异常,并且该进程不再卡住。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      相关资源
      最近更新 更多