Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya menyelesaikan masalah ketinggalan dan ketinggalan semasa menjalankan program melalui EXE?

Bagaimanakah saya menyelesaikan masalah ketinggalan dan ketinggalan semasa menjalankan program melalui EXE?

王林
王林ke hadapan
2024-02-06 08:30:11601semak imbas

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

Kandungan soalan

Saya sedang membangunkan program membaca sensor di mana sebahagian daripada program melibatkan mencetak kemas kini masa nyata status sensor apabila sasaran logam bergerak lebih jauh atau lebih dekat dengan sensor. Fail "main_gui.py" akan dijalankan terlebih dahulu dan sebaik sahaja pengguna mengklik butang "Mulakan Data Retrieval", ia akan melancarkan sub-proses "ies2v2.py" di mana proses membaca sensor akan dilakukan dan dicetak.

Kod di bawah menunjukkan cara kod yang asalnya dicetak dalam konsol dicetak ke dalam 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()

Apabila menjalankan exe, saya mengalami kelewatan dalam mencetak penyata ke gui, sebaik sahaja butang "Mulakan Data Retrieval" diklik, data cetakan dicetak dalam sebahagian besar data dengan tergesa-gesa, dengan kelewatan yang lama sebelum Cetak semula . Moga berjalan lancar seperti pycharm...

NOTA: Saya juga menghadapi masalah mencipta exe dengan ralat seperti ini. Saya membetulkannya dengan menyalin fail yang tidak dijumpai ke dalam laluan dan exe berjalan dengan baik dari sisi saya. FYI sekiranya ini mungkin sebab kelewatan...tetapi saya rasa tidak sepatutnya.

EDIT: Di bawah kod ies2v2.py (sebahagian daripadanya) adalah bahagian yang membaca output sensor dan memastikan ia dikemas kini.

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

Jawapan betul


Seperti yang kami temui dalam ulasan, proses kanak-kanak tidak membuang penimbal stdoutnya dan itulah yang menyebabkan kelewatan. Satu cara untuk mengepam keluaran standard adalah dengan memanggil print 函数时添加 flush=True .

Atas ialah kandungan terperinci Bagaimanakah saya menyelesaikan masalah ketinggalan dan ketinggalan semasa menjalankan program melalui EXE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam