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

问题描述 投票:0回答:1

我正在开发一个传感器读取程序,其中该程序的一部分涉及当金属目标进一步或靠近传感器时打印出传感器状态的实时更新。 “main_gui.py”文件将是第一个运行的,一旦用户单击“开始数据检索”按钮,它将启动子进程“IES2V2.py”,在其中执行传感器读取过程并打印出来。

下面的代码显示了最初在控制台中打印的代码如何被打印到 GUI 中。

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

运行 EXE 时,一旦单击“开始数据检索”按钮,我在将语句打印到 GUI 时遇到延迟,打印数据将匆忙地以大量数据的形式打印出来,并且在再次打印之前有很长的延迟。我希望它能像 PyCharm 一样顺利运行...

注意:我在创建 EXE 时也遇到了问题,出现类似 this 的错误。我通过将找不到的文件复制到路径中来修复它,并且 EXE 从我这边运行正常。仅供参考,以防这可能是延迟的原因......但我认为不应该如此。

编辑:IES2V2.py代码(其中一些)下面是读取传感器输出并不断更新的部分。

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
python exe live-update
1个回答
0
投票

正如我们在评论中发现的那样,子进程没有刷新其标准输出缓冲区,这就是导致延迟的原因。刷新标准输出的一种方法是在调用

flush=True
函数时添加
print

© www.soinside.com 2019 - 2024. All rights reserved.