ホームページ >バックエンド開発 >Python チュートリアル >EXE を介してプログラムを実行するときに遅延や遅延の問題を解決するにはどうすればよいですか?

EXE を介してプログラムを実行するときに遅延や遅延の問題を解決するにはどうすればよいですか?

王林
王林転載
2024-02-06 08:30:11627ブラウズ

如何解决通过 EXE 运行程序时的延迟和滞后问题?

質問内容

私は、金属ターゲットが遠ざかったり近づいたりしたときにセンサーの状態を出力するプログラムの一部を含むセンサー読み取りプログラムを開発しています。センサーはリアルタイムで更新されます。 「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 サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。