(Linuxの場合)Pythonを使用してハードディスクの温度を取得したいと考えています。私は現在hddtemp
をsubprocess.popen
と呼んでいますが、私はそれをスクリプトの中でパフォーマンスのボトルネックと呼んでいます。 question 4193514と似たようなことができるはずですか?Pythonを使用してハードディスクの温度を取得
答えて
あなたはそれを照会するソケットを使用して、デーモン(-dオプション)としてhddtemp実行することができます - ポートデフォルトは7634.
編集:some code that does thisを参照してください。
これはまさに私が探していたものです。ありがとう!コード例のボーナスポイント。 – lyineyes
@gnibblerが主なコメントで示唆したことを拡張して、キャッシュされたアプローチはどうですか?
from collection import defaultdict
class CachedValue(object):
def __init__(self):
self.timestamp = -1
self._value = None
@property
def value(self):
return self._value
@value.setter
def value(self, val):
self._value = val
self.timestamp = time.time()
def isOld(self, seconds):
return (time.time() - self.timestamp) >= seconds
>>> _cached = defaultdict(CachedValue)
>>> _cached['hddtemp'].isOld(10)
True
>>> _cached['hddtemp'].value = 'Foo'
>>> _cached['hddtemp'].isOld(10)
False
# (wait 10 seconds)
>>> _cached['hddtemp'].isOld(10)
True
そして、あなたの特定のケースで
:def reportHDD(self):
if self._cached['hddtemp'].isOld(10):
self._cached['hddtemp'].value = self.getNewHDDValue()
return self._cached['hddtemp'].value
このアプローチは、高価な操作をキャッシュするための一般的なソリューションの本当に多くのですこれは単なる概念を示すために、愚かな簡単な例です。大規模なアプリケーションでは、CachedValueは簡単なmemcached/redisルックアップで簡単に置き換えることができ、独自のTTL値を保持します。しかし、小規模では、ローカルのキャッシュされた値を整理するための素晴らしい方法です。
素晴らしい例。私はこれを他の機能に使用すると思いますが、ハードドライブの温度を得るために、dictエントリを更新するためにスレッドを生成することにしました(遅いシステムコールのオーバーヘッドを緩和しようとする)。 – lyineyes
@lyineyes:でも、一時的に妥当な時間枠内でしか変動しないのであれば、それはスレッドやそれ以外の場所でオーバーヘッドが発生するのでしょうか?しかし、Hugh Bothwell氏は、このツールのデーモン版を具体的に監視できることを彼の答えで述べています。おそらくそれはあなたの非常に具体的な修正です。しかし、私はあなたが一般的なキャッシングソリューションのこのアプローチを気に入ってうれしいです! – jdi
私はしばらくの間、私の検索をどのようにフォーマットしても、トップの近くでこのヒットを続けていました。私はsmartmontoolsを持っていて、少なくともPython 2.7.6を私のホストのすべてにインストールしていました。そして、hdd temp dataをpipe/graphs/statsdにパイプする新しいパッケージをインストールしたくないので、以下のようにしました。
私は開発者ではありません。私はpythonを分かりません(これは明らかです)。これは、これを理解するための1-2日の試みです。 Iこれはすべてを反復処理するために2秒対50秒で38台のドライブの完全なリストを返され、ここですべてのコードを投稿するにはあまりにも恥ずかしい思いますが、ここでの主なdealyです::
enter code here
#!/usr/bin/env python
import os
import subprocess
import multiprocessing
def grab_hdd_temp(hdd, queue):
for line in subprocess.Popen(['smartctl', '-a', str('/dev/' + hdd)], stdout=subprocess.PIPE).stdout.read().split('\n'):
if ('Temperature_Celsius' in line.split()) or ('Temperature_Internal' in line.split()):
queue.put([hdd, line.split()[9]])
def hddtmp_dict(hdds_list):
procs = []
queue = multiprocessing.Queue()
hddict={}
for hdd in hdds_list:
p = multiprocessing.Process(target=grab_hdd_temp, args=(hdd, queue))
procs.append(p)
p.start()
for _ in procs:
val = queue.get()
hddict[val[0]]=val[1]
p.join()
return hddict
if __name__ == '__main__':
hdds_list = [ x for x in os.listdir('/sys/block/') if x.startswith('sd') ]
hddict = hddtmp_dict(hdds_list)
for k in hddict:
print(k, hddict[k])
マイストレージサーバ上でディスクをシリアルに接続します。それは、40コアボックスで約1.08から3.50に上がっていると言いました。だからそれをあなたの意志で取る。私は、procを使用する方法、あるいはfcntl based on another stack overflow I foundを使用して、subprocess.popenではなくehを使用してデータを取得する方法を見つけようとしています。
ここは2時22分です。私は家に向かう必要があります。一度そこに私は上記のスニペットを概説しようとし、すべてが何をしていると思っていると言うだろうが、それはやや自明だと思う。
申し訳ありませんが、kludgeコードです。私はこの時点でバッファーがより良い方法だと思っていますが、それは素晴らしい演習でした。 hddtempをインストールしたくない場合は、上記のバッファ+が最適なオプションかもしれないと思います。まだそれを理解しようとしているだけでなく、私は授業の仕方を理解していません。
私はこれが誰かを助けてくれることを願っています。
悲しいことに私は現在、ServerFaultから一年停止しています。なぜなら、シフトキーを使用する初心者には、 – peterh
- 1. lmセンサーを使用して温度を取得する
- 2. iOSの現在の温度を取得
- 3. Cordova-BLEプラグインを使用してIbeaconからバッテリ電圧と温度を取得
- 4. 平均体温(python)を取得するpyowmを使用
- 5. JSONから温度を取得する
- 6. CMD/POWERシェルでCPU温度を取得
- 7. Python - 温度補間
- 8. GUIを使用した温度コンバータ
- 9. CPU温度とCPUとRAMの使用方法を取得するには?
- 10. Javaでインターネット速度とCPU温度を取得する方法
- 11. macOS。プログラムによってCPU温度を取得する方法
- 12. Androidを使用してDHT11から温度を読み取る場合
- 13. arduinooキットの温度センサを使用して温度値を測定することができません
- 14. 表示温度ノード - 赤いラズベリーパイのセンスノードを使用して
- 15. グローバル温度テーブルでマージを使用
- 16. Caffe:スケール層を使用してSoftmax温度を追加する
- 17. Rainbow HAT Androidの温度の温度オフセット
- 18. WMIを使用してCPU温度を取得するにはどうすればよいですか?
- 19. ハードディスクのシリアル番号をPythonで取得する方法
- 20. Pythonを使用してフォームデータを取得
- 21. Pythonを使用してデータを取得
- 22. javascript(serverside)の温度値を取得する方法は?
- 23. Pythonの温度関数の問題
- 24. Pythonの温度エラーの変換
- 25. Windows IOTコアでRaspberry PiからCPU温度を取得
- 26. 温度値の移動平均(Python)
- 27. Python Jupyterノートブック経由の温度予測
- 28. ノードJS、CPU温度を読み取る
- 29. 私は私のpython温度ユニットコンバーターと苦労しています
- 30. クラス外からのSPI温度データの取得
どのくらいの頻度で温度をチェックしていますか?あなたは1分程度の値をキャッシュすることができるはずです。それは非常に迅速に変化しません。 –
@gnibbler:しかし、彼は暖炉にマシンを投げ込む状況をどうやって測定することができますか? – jdi
リアルタイムサーバーのステータスを表示するWebページ用です。ページが開いているときは、約5-10秒ごとにリフレッシュされます。 – lyineyes