whileループでPythonを24時間365日実行させます。プログラムの例を次に示します。
while True:
print ("me again...")
しかし、実行すると、CPUは100%になります!しかし、プログラムが長時間実行されるなどのために、CPUが非常に熱くなることを望まないので、それを防ぐことができますか?
whileループでPythonを24時間365日実行させます。プログラムの例を次に示します。
while True:
print ("me again...")
しかし、実行すると、CPUは100%になります!しかし、プログラムが長時間実行されるなどのために、CPUが非常に熱くなることを望まないので、それを防ぐことができますか?
回答:
ループの終わりに
time.sleep(xx)
秒、またはtime.sleep(x.x)
部分的な秒を表す
(そうのように、ライブラリの時間をインポートすることを忘れないでください。import time
)
xxは、プログラムに悪影響を与えることなく、可能な限り高くします。現在、あなたのプログラムは、Piが休んだり他のことをするための時間を与えるのではなく、可能な限り高速ですべてを常に実行しています。
import time
?
タスクを繰り返し実行する必要があることを確認してください。これはビジー待機と呼ばれ、ほとんど常に最適ではありません。タスクがサブプロセスの出力をチェックしている場合、たとえば、サブプロセスの出力を確認するだけで済みますsubprocess.wait()
。ファイルシステム内のファイルまたはディレクトリがタッチされるのを待つことがタスクの場合、pyinotifyを使用して、カーネルが処理するファイルシステムイベントからコードをトリガーできます。
これは、CPUを過度に消費せずにビジー待機のために無限ループを作成する方法です。
Python 2:
from __future__ import print_function
from __future__ import division
import time
while True:
range(10000) # some payload code
print("Me again") # some console logging
time.sleep(0.2) # sane sleep time of 0.1 seconds
Python 3:
import time
while True:
range(10000) # some payload code
print("Me again") # some console logging
time.sleep(0.2) # sane sleep time of 0.1 seconds
@gnibblerが別の回答でテストしたように、提示されたコードは最近のマシンで1%を超えるCPUを消費するべきではありません。それでもペイロードコードでCPUを消費しすぎる場合は、スリープ時間をさらに長くすることを検討してください。一方、ペイロードコードは、繰り返し実行するために最適化する必要があります。たとえば、キャッシュにより、変更されていないデータの実行を高速化できます。
この回答は、@ user2301728の回答に基づいて作成しようとします。
私は同じ問題を抱えていました。StackExchangeに関する私の質問をご覧ください。解決策は、の組み合わせだったtime.sleep(0.01)
とnice
。nice
アプリケーションで使用可能なCPUを下げます。これは私がアプリを起動する方法です:nice -n 19
。