Maison  >  Article  >  développement back-end  >  Comment résoudre les problèmes de décalage et de décalage lors de l’exécution de programmes via un EXE ?

Comment résoudre les problèmes de décalage et de décalage lors de l’exécution de programmes via un EXE ?

王林
王林avant
2024-02-06 08:30:11601parcourir

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

Contenu de la question

Je développe un programme de lecture de capteur dont une partie du programme consiste à imprimer des mises à jour en temps réel de l'état du capteur lorsqu'une cible métallique s'éloigne ou se rapproche du capteur. Le fichier "main_gui.py" sera exécuté en premier et une fois que l'utilisateur clique sur le bouton "Démarrer la récupération des données", il lancera le sous-processus "ies2v2.py" où le processus de lecture du capteur sera effectué et imprimé.

Le code ci-dessous montre comment le code initialement imprimé dans la console est imprimé dans l'interface graphique.

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

Lors de l'exécution de l'exe, je rencontre des retards dans l'impression des instructions sur l'interface graphique. Une fois le bouton "Démarrer la récupération des données" cliqué, les données d'impression sont imprimées en gros morceaux à la hâte, avec un long délai avant d'imprimer à nouveau. . J'espère que cela fonctionnera aussi bien que pycharm...

REMARQUE : j'ai également eu des problèmes pour créer un exe avec des erreurs comme celle-ci. Je l'ai corrigé en copiant le fichier introuvable dans le chemin et l'exe a bien fonctionné de mon côté. Pour information, au cas où cela pourrait être la raison du retard... mais je ne pense pas que cela devrait l'être.

EDIT : sous le code ies2v2.py (une partie) se trouve la partie qui lit la sortie du capteur et la maintient à jour.

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

Bonne réponse


Comme nous l'avons découvert dans les commentaires, le processus enfant ne vide pas son tampon de sortie standard et c'est ce qui cause le retard. Une façon de vider la sortie standard consiste à appeler print 函数时添加 flush=True .

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer