1

非常に CPU を集中的に使用するデータ変更スクリプトを作成しました。数日間実行されていますが、現在 (コンソールに送信された追跡メッセージのおかげで)、動作していないことがわかります (実際には、過去 10 時間ほど動作していません.

を実行するtopと、プロセスがスリープ状態 (S) または解釈不能なスリープ状態 (D) であることがわかります。これは多くの時間を無駄にしています。

以前sudo renice -10 PIDはプロセスのナイス値を変更していましたが、しばらく実行した後、プロセスが再びスリープ状態に戻ったことに気付きました。

私の質問:

  1. スクリプトが終了するまでスクリプトを強制的に実行するためにできることはありますか (それがスクリプトの最後までマシンが使用できないことを意味する場合でも?

  2. Python で使用できるコマンドはありyieldますか?これにより、他のプロセス/スレッドに定期的に制御を渡して、スケジューラがスクリプトをスリープ状態にしようとするのを停止できますか?

Ubuntu 10.0.4でpython 2.7.xを使用しています

4

1 に答える 1

2

スケジューラーは、実行する準備ができている別のプロセスがある場合にのみ、プロセスを保留にします。CPU を占有するプロセスが他にない場合、プロセスはほとんどの時間実行されます。スケジューラーは、プロセスがスリープ状態にあると感じたからといって、プロセスをスリープ状態にするわけではありません。

私の推測では、プロセスが実行できない何らかの理由があると思われます。たとえば、I/O またはデータをブロックして待機しているなどです。

于 2012-06-29T09:20:50.097 に答える