>  기사  >  백엔드 개발  >  EXE를 통해 프로그램을 실행할 때 지연 및 지연 문제를 어떻게 해결합니까?

EXE를 통해 프로그램을 실행할 때 지연 및 지연 문제를 어떻게 해결합니까?

王林
王林앞으로
2024-02-06 08:30:11541검색

如何解决通过 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()

정답


댓글에서 발견했듯이 하위 프로세스는 표준 출력 버퍼를 플러시하지 않으며 이것이 지연의 원인입니다. 표준 출력을 플러시하는 한 가지 방법은 print 函数时添加 flush=True 을 호출하는 것입니다.

위 내용은 EXE를 통해 프로그램을 실행할 때 지연 및 지연 문제를 어떻게 해결합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제