私はRaspberry PIを使用しており、pythonスクリプトを使用してサウンドセンサーから値を出力しています。これを表示するために、私はJavaScriptのインクルードを呼び出すPI上のHTMLページを使用します。これは、Googleゲージの表示内容を変更するための値を定義する単一行です。このすべてはかなりシンプルでわかりやすく、私のニーズにはうまく機能します。Pythonのfile.close()とwith()ビヘイビアが高い周波数ループで使用されています
.jsファイルは私のpythonスクリプトによって書き出されています。これは他のものにもあてはまります。これは実際に私が望むとおりに正確に動作し、ファイルに書き込まれる値は正確であり、実行する連続した "モニタリングサービス"モードではなく、単一のループとして実行するとゲージ上に正しく表示されます中断するまで
問題がどこから始まるのですか。サウンドレベルを測定するループは、5秒で〜30k回実行されます。私のpythonのコードでは、私が使用します。
with open(web_file, 'w') as f_output:
f_output.write("var int_level = " + str(per_detected))
f_output.close()
私はをTHINK ので、私はこれをやっている私がいるため、ループのクローズするたびに行う必要があります(私は「と」暗黙的に近いですけど、私ので、無理にそれを閉じるのが良いと思われるたびにファイルを開いてください)、BUT私もそれが問題かもしれないと思います。 (私は意図的にモード 'w'を使用しているので、ファイルを1行にするたびにリセットすることができます) -
GoogleゲージのHTML新しい値をロードするために5秒ごとに1回リフレッシュされますが、ゲージ自体は10回のリフレッシュごとにレンダリングされますが、これは完全にランダムであり、返される.jsファイルに値がないことを示します。私はこれが、おそらく数回の試行で一度ラッキーになって、ファイルが閉じる前に打ち切られたことを意味していますか、それとも速すぎるのですか?これは愚かなやり方ですか?
さらに、私のPythonコードを "強制終了"した後、PI上のコマンドラインからcat level.js(< - インクルードファイル)を空にすると、
私はで(HTMLページを含む)すべてのコードを持って:あなたは、より詳細のために検討したい場合
https://www.GitHub.com/ChrisHarrold/Pi-Projects
。それは日曜日まで6つの方法でコメントされているので、私が何をしたのか、そしてなぜそれを理解するのは自明であるはずです。
「with」を使用する理由の1つは、明示的にファイルを閉じる必要がないためです。 –
古いコンテンツが消去されるポイントと新しいコンテンツがフラッシュされるポイントとの間でファイルを読み込んでいるようです。 – user2357112
@ScottHunterはい - 私は知っていますが、高周波ループを考えると、それが閉じられたことを確認したいと思いましたが、問題に追加/複合化している可能性があります。 – charrold303