fix zombie process & added more quality metrics
This commit is contained in:
@@ -5920,11 +5920,12 @@ class MainApplication(QMainWindow):
|
||||
# Start processing
|
||||
if current_process().name == 'MainProcess':
|
||||
self.result_queue = Queue()
|
||||
self.ack_queue = Queue()
|
||||
self.progress_queue = Queue()
|
||||
|
||||
self.result_process = Process(
|
||||
target=run_gui_entry_wrapper,
|
||||
args=(collected_data, self.result_queue, self.progress_queue)
|
||||
args=(collected_data, self.result_queue, self.progress_queue, self.ack_queue)
|
||||
)
|
||||
self.result_process.daemon = False
|
||||
self.result_process.start()
|
||||
@@ -5986,6 +5987,29 @@ class MainApplication(QMainWindow):
|
||||
self.show_error_popup(f"Error: {file_path}", error_msg, msg.get("traceback", ""))
|
||||
self.statusbar.showMessage(f"Failed: {os.path.basename(file_path)}")
|
||||
|
||||
elif isinstance(msg, dict) and msg.get("type") == "FINISHED_SUCCESSFULLY":
|
||||
# The child has finished its work AND its own cleanup.
|
||||
# It is now safe for the GUI to stop the timer and clean up.
|
||||
try:
|
||||
self.ack_queue.put("ACK")
|
||||
except: pass
|
||||
self.result_timer.stop()
|
||||
self.cleanup_after_process()
|
||||
|
||||
success_count = len(self.files_results)
|
||||
fail_count = self.files_total - success_count
|
||||
self.statusbar.showMessage(f"Complete: {success_count} succeeded, {fail_count} failed.")
|
||||
|
||||
if success_count > 0:
|
||||
self.button3.setVisible(True)
|
||||
|
||||
# Reset the button
|
||||
try: self.button1.clicked.disconnect()
|
||||
except: pass
|
||||
self.button1.setText("Process")
|
||||
self.button1.clicked.connect(self.on_run_task)
|
||||
return # Exit the method
|
||||
|
||||
elif isinstance(msg, dict) and msg.get("success") is True:
|
||||
self.statusbar.showMessage("All files processed successfully!")
|
||||
|
||||
@@ -6003,22 +6027,6 @@ class MainApplication(QMainWindow):
|
||||
_, file_path, step_index = msg
|
||||
self.progress_update_signal.emit(file_path, step_index)
|
||||
|
||||
if len(self.files_done) >= self.files_total:
|
||||
self.result_timer.stop()
|
||||
self.cleanup_after_process()
|
||||
|
||||
success_count = len(self.files_results)
|
||||
fail_count = self.files_total - success_count
|
||||
self.statusbar.showMessage(f"Complete: {success_count} succeeded, {fail_count} failed.")
|
||||
|
||||
if success_count > 0:
|
||||
self.button3.setVisible(True)
|
||||
|
||||
try:
|
||||
self.button1.clicked.disconnect()
|
||||
except: pass
|
||||
self.button1.setText("Process")
|
||||
self.button1.clicked.connect(self.on_run_task)
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error in timer loop: {e}")
|
||||
@@ -6049,7 +6057,7 @@ class MainApplication(QMainWindow):
|
||||
msgbox.setDetailedText(traceback_str)
|
||||
|
||||
msgbox.setStandardButtons(QMessageBox.Ok)
|
||||
msgbox.exec_()
|
||||
msgbox.show()
|
||||
|
||||
|
||||
def cleanup_after_process(self):
|
||||
@@ -6074,10 +6082,6 @@ class MainApplication(QMainWindow):
|
||||
self.progress_queue.close()
|
||||
self.progress_queue.join_thread()
|
||||
|
||||
# Shutdown manager to kill its server process and clean up
|
||||
if hasattr(self, 'manager'):
|
||||
self.manager.shutdown()
|
||||
|
||||
|
||||
def update_file_progress(self, file_path, step_index):
|
||||
key = os.path.normpath(file_path)
|
||||
@@ -6204,14 +6208,14 @@ def _extract_metadata_worker(file_name):
|
||||
print(f"Worker failed on {file_name}: {e}")
|
||||
return None
|
||||
|
||||
def run_gui_entry_wrapper(config, gui_queue, progress_queue):
|
||||
def run_gui_entry_wrapper(config, gui_queue, progress_queue, ack_queue):
|
||||
"""
|
||||
Where the processing happens
|
||||
"""
|
||||
|
||||
try:
|
||||
import flares
|
||||
flares.gui_entry(config, gui_queue, progress_queue)
|
||||
flares.gui_entry(config, gui_queue, progress_queue, ack_queue)
|
||||
gui_queue.close()
|
||||
# gui_queue.join_thread()
|
||||
progress_queue.close()
|
||||
|
||||
Reference in New Issue
Block a user