私は、金属ターゲットが遠ざかったり近づいたりしたときにセンサーの状態を出力するプログラムの一部を含むセンサー読み取りプログラムを開発しています。センサーはリアルタイムで更新されます。 「main_gui.py」ファイルが最初に実行され、ユーザーが「データ取得開始」ボタンをクリックすると、サブプロセス「ies2v2.py」が起動され、そこでセンサー読み取りプロセスが実行され、出力されます。
以下のコードは、最初にコンソールに出力されたコードがどのように GUI に出力されるかを示しています。
リーリーexe を実行すると、GUI へのステートメントの出力に遅延が発生します。「データ取得開始」ボタンをクリックすると、印刷データが大量のデータとして急いで出力され、長い時間がかかります。再印刷までの遅延時間。 pycharm と同じくらいスムーズに動作するといいのですが...
注: また、exe の作成時に問題が発生し、このエラーが発生しました。見つからないファイルをパスにコピーすることで修正したところ、exe は正常に実行されました。これが遅延の理由かもしれないので参考までに…しかし、そうあるべきではないと思います。
編集: ies2v2.py コード (一部) の下には、センサー出力を読み取り、継続的に更新する部分があります。
def start_data_retrieval(self): # start a new thread for data retrieval threading.thread(target=self.retrieve_data_thread).start() def retrieve_data_thread(self): selected_current = loadcurrent[currentgrp.get()] selected_output = outputtype[outputgrp.get()] print(f"selected current: {selected_current}, selected output: {selected_output}") with subprocess.popen(["python", "ies2v2.py", "--port", self._port, "--current", selected_current.name, "--output", selected_output.name], stdout=subprocess.pipe, stderr=subprocess.stdout) as process: for line in process.stdout: line = line.decode() # defaulting to system encoding text_box.insert(end, line) text_box.update() text_box.see(end) process.poll()
コメントで発見したように、子プロセスは標準出力バッファをフラッシュしていないため、それが遅延の原因です。標準出力をフラッシュする 1 つの方法は、print
関数を呼び出すときに flush=True
を追加することです。
以上がEXE を介してプログラムを実行するときに遅延や遅延の問題を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。