1

我编写了一个 CPU 密集型数据处理脚本。它已经运行了几天,但是现在(感谢发送到控制台的跟踪消息),我可以看到它没有工作(实际上,过去 10 个小时左右都没有工作。

当我运行时top,我注意到进程要么处于睡眠状态(S),要么处于不可中断的睡眠状态(D)。这是在浪费很多时间。

我曾经sudo renice -10 PID更改过进程的nice值,运行了一会儿后,我注意到进程又重新进入睡眠状态。

我的问题:

  1. 我可以做些什么来强制脚本运行直到它完成(如果这意味着机器在脚本结束之前无法使用?

  2. 有没有yield我可以在 Python 中使用的命令,它允许我定期将控制权传递给其他进程/线程,以阻止调度程序试图让我的脚本进入睡眠状态?

我在 Ubuntu 10.0.4 上使用 python 2.7.x

4

1 回答 1

2

只有当有另一个进程准备好运行时,调度程序才会暂停您的进程。如果您没有其他占用 CPU 的进程,那么您的进程将大部分时间都在运行。调度程序不会仅仅因为感觉像就让您的进程进入睡眠状态。

我的猜测是您的进程无法运行是有某种原因的,例如它正在阻塞并等待 I/O 或数据。

于 2012-06-29T09:20:50.097 回答