Heim  >  Artikel  >  Backend-Entwicklung  >  Wie behebe ich Verzögerungen und Verzögerungsprobleme beim Ausführen von Programmen über eine EXE-Datei?

Wie behebe ich Verzögerungen und Verzögerungsprobleme beim Ausführen von Programmen über eine EXE-Datei?

王林
王林nach vorne
2024-02-06 08:30:11599Durchsuche

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

Frageninhalt

Ich entwickle ein Sensorleseprogramm, bei dem ein Teil des Programms darin besteht, Echtzeitaktualisierungen des Sensorstatus auszudrucken, wenn sich ein Metallziel weiter oder näher an den Sensor heranbewegt. Zuerst wird die Datei „main_gui.py“ ausgeführt. Sobald der Benutzer auf die Schaltfläche „Datenabruf starten“ klickt, wird der Unterprozess „ies2v2.py“ gestartet, in dem der Sensorlesevorgang durchgeführt und ausgedruckt wird.

Der folgende Code zeigt, wie der ursprünglich in der Konsole gedruckte Code in die GUI gedruckt wird.

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()

Beim Ausführen der Exe kommt es zu Verzögerungen beim Drucken von Anweisungen auf der GUI. Sobald auf die Schaltfläche „Datenabruf starten“ geklickt wird, werden die Druckdaten schnell in großen Datenblöcken ausgedruckt, mit einer langen Verzögerung vor dem erneuten Drucken . Ich hoffe, es läuft so reibungslos wie Pycharm...

HINWEIS: Ich hatte auch Probleme beim Erstellen einer Exe mit solchen Fehlern. Ich habe das Problem behoben, indem ich die nicht gefundene Datei in den Pfad kopiert habe, und die Exe-Datei lief von meiner Seite aus einwandfrei. Zu Ihrer Information, falls dies der Grund für die Verzögerung sein könnte ... aber ich denke nicht, dass dies der Fall sein sollte.

BEARBEITEN: Unterhalb des ies2v2.py-Codes (einige davon) befindet sich der Teil, der die Sensorausgabe liest und auf dem neuesten Stand hält.

print('\n---- Reading Data ----')
print("Live update of sensor data PROCESS_ADDR will begin. Press the 'Enter' key to stop the updates.")
time.sleep(5)

prev_process_addr = ies2.get_value(122)
while True:
    print(f'Update of PROCESS_ADDR : {ies2.get_value(122)}')  # SU
    new_process_addr = ies2.get_value(122)
    if new_process_addr != prev_process_addr:
        print(f"PROCESS_ADDR value changed! {prev_process_addr} to {new_process_addr}")
        prev_process_addr = new_process_addr

    if keyboard.is_pressed('enter'):
     print("\nKey pressed! Stopping the sensor updates.")
     break

Richtige Antwort


Wie wir in den Kommentaren festgestellt haben, leert der untergeordnete Prozess seinen Standardpuffer nicht und das ist der Grund für die Verzögerung. Eine Möglichkeit, die Standardausgabe zu leeren, besteht darin, print 函数时添加 flush=True aufzurufen.

Das obige ist der detaillierte Inhalt vonWie behebe ich Verzögerungen und Verzögerungsprobleme beim Ausführen von Programmen über eine EXE-Datei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen