调度程序将长时间运行的CPU密集型python脚本发送到睡眠状态

时间:2012-06-29 09:13:57

标签: python ubuntu sysadmin nice

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

当我运行top时,我注意到该过程要么处于休眠状态(S),要么处于无法进行的睡眠状态(D)。这浪费了很多时间。

我使用sudo renice -10 PID来改变进程的漂亮值,在运行一段时间之后,我注意到进程再次进入休眠状态。

我的问题:

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

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

  3. 我在Ubuntu 10.0.4上使用python 2.7.x

1 个答案:

答案 0 :(得分:2)

如果有另一个进程准备运行,则调度程序将仅暂停您的进程。如果您没有其他进程占用CPU,则您的进程将在大多数时间运行。调度程序不会因为感觉就好而让你的进程进入休眠状态。

我的猜测是,您的流程无法运行,例如它阻塞并等待I / O或数据。