ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

干货:长任务反馈

干货:长任务反馈 长任务反馈daemon 线程 信号 vs 直接阻塞的取舍长任务界面不能卡识一个目录要好几秒。如果你在按钮回调里直接同步跑界面就彻底卡死用户以为程序死了。第一性原理长时间任务必须离开 UI 线程用后台线程跑然后靠信号把进度/结果送回来更新界面。两种 vi 思路做法一直接阻塞错def_on_click(self):self.split_btn.setEnabled(False)heavy_work(self.pdf)# 阻塞UI好几秒界面死给你看self.split_btn.setEnabled(True)界面在这几秒里无法响应、无法重绘体验极差。做法二daemon 线程 信号对def_run_split(self):...threading.Thread(targetself._split_worker,daemonTrue).start()def_split_worker(self):resultstep_split(self._pdf,self._plugin,temp_dir)self.split_done.emit(result)# 信号回到主线程后台线程算算完 emit 信号主线程在 connect 的槽里更新界面、恢复按钮。daemonTrue 的意义daemonTrue表示这是守护线程主程序退出时它自动被拖死不会阻塞程序关闭。threading.Thread(targetself._split_worker,daemonTrue).start()对我们的场景任务跑不完程序要退出直接放弃即可不用等它——这正合适。取舍结论直接阻塞禁止UI 卡死。daemon 信号UI 顺畅退出无牵挂结果靠信号回主线程更新。别每次看按钮回调里放一堆重活一律走后台线程跑 信号回主线程。这条天花板PySide6 项目尤其重要。
返回列表