ホームページ >バックエンド開発 >Python チュートリアル >継続的に更新されるプロセスから出力を読み取るときに Python がフリーズしないようにするにはどうすればよいですか?
Python で常に更新されるプロセスの出力を読み取ろうとすると、フリーズの問題が発生する可能性があります。この問題は、特に readlines() メソッドを使用する場合に発生します。
提供されたコード スニペットでは、 process = os.popen("top") です。 readlines() 行によりプログラムがハングします。これは、readlines() がサブプロセスの出力全体を一度に読み取るためです。これは量が多くなり、ブロック操作が長くなる可能性があります。
より良いアプローチは次のとおりです。 subprocess.Popen() 関数を使用してサブプロセスを作成し、その入出力を管理します。その方法は次のとおりです。
<code class="python">import subprocess process = subprocess.Popen('top') time.sleep(2) os.popen("killall top") print process</code>
このコードは、Popen() を使用して、トップを実行するサブプロセスを作成します。 2 秒待った後、トッププロセスを終了し、最後にサブプロセスオブジェクトを出力します。ただし、この方法でもフォーマットされていないオブジェクトが返されます。
プログラムをブロックせずにサブプロセスの出力を読み取るには、一時ファイルを使用して出力を保存できます。コードの改良版は次のとおりです。
<code class="python">#!/usr/bin/env python import subprocess import tempfile import time def main(): # Create a temporary file to store the subprocess output f = tempfile.TemporaryFile() # Start the subprocess and redirect its stdout to the temporary file process = subprocess.Popen(["top"], stdout=f) # Wait for a few seconds time.sleep(2) # Kill the subprocess process.terminate() process.wait() # Seek to the start of the temporary file and read the output f.seek(0) output = f.read() # Close the temporary file f.close() # Print the output of the subprocess print(output) if __name__=="__main__": main()</code>
このソリューションにより、サブプロセスの出力の読み取り中にプログラムがハングしないことが保証されます。 subprocess.wait() メソッドは、サブプロセスが終了するのを待ち、ファイルにアクセスする前にすべての出力がファイルに書き込まれたことを確認します。
以上が継続的に更新されるプロセスから出力を読み取るときに Python がフリーズしないようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。