# # 多线程实例3 method = [pieState] # 字典 self.thread_s1 = {} self.worker_s1 = {} for i in range(len(method)): self.thread_s1[i] = 'thread' + str(i) self.worker_s1[i] = 'worker' + str(i) for j in range(len(method)): self.thread_s1[j] = QThread() self.worker_s1[j] = Worker() self.worker_s1[j].moveToThread(self.thread_s1[j]) self.thread_s1[j].started.connect(self.worker_s1[j].run) self.worker_s1[j].finished.connect(self.thread_s1[j].quit) self.worker_s1[j].finished.connect(self.worker_s1[j].deleteLater) self.thread_s1[j].finished.connect(self.thread_s1[j].deleteLater) self.worker_s1[j].finished.connect(method[j]) # Start the thread self.thread_s1[j].start() #调用函数 # pieState() except Exception as alarm: message = QMessageBox.warning(stack1,'警告','数据库没有数据',QMessageBox.Ok)子线程报警:RuntimeError: In affine_transform: Invalid vertices array.没有触发try except
时间: 2024-02-14 15:19:22 浏览: 25
这段代码是关于多线程的实例。其中使用了QThread和Worker类来创建子线程,并将对象移动到子中。在这个子中,创建了多个子线程来执行不同的函数(method)。在每个子线程中,启动后会执行Worker类中的run方法,当run方法执行完毕后,会触发finished信号,并且会将子线程和Worker对象删除。同时,还将finished信号和对应的函数(method)连接起来,以便在子线程任务完成后执行相应的函数。
至于你提到的try except未被触发的问题,可能是因为在子线程中抛出的异常并没有被正确捕获,你可以在Worker类中添加异常处理来避免这种情况的发生。
相关问题
# # 多线程实例3 method = [pieState] # 字典 self.thread_s1 = {} self.worker_s1 = {} for i in range(len(method)): self.thread_s1[i] = 'thread' + str(i) self.worker_s1[i] = 'worker' + str(i) try: for j in range(len(method)): self.thread_s1[j] = QThread() self.worker_s1[j] = Worker() self.worker_s1[j].moveToThread(self.thread_s1[j]) self.thread_s1[j].started.connect(self.worker_s1[j].run) self.worker_s1[j].finished.connect(self.thread_s1[j].quit) self.worker_s1[j].finished.connect(self.worker_s1[j].deleteLater) self.thread_s1[j].finished.connect(self.thread_s1[j].deleteLater) self.worker_s1[j].finished.connect(method[j]) # Start the thread self.thread_s1[j].start() except Exception as alarm: print(str(alarm))子线程运行报警为什么没有触发try except
根据您提供的修改后的代码,可以看出您已经在try语句块中包含了整个for循环。因此,如果有任何异常在for循环中抛出,都应该被try语句块捕获并触发except语句块中的代码。如果您仍然没有触发try except机制,可能是因为您没有正确地引发异常。您可以尝试在for循环中添加一些故意触发异常的代码来测试try except机制是否正常工作。
def __init__(self, width, height, route_list): self.width = width self.height = height self.route_list = route_list self.video_list = [] self.thread_pool = ThreadHelper.thread_pool self.do_work = None self.cache_output = [] self.cache_worker_name = [] self.video_writer_list = [] self.qt_is_show = False self.cur_page = 0 self.init_worker_and_video() self.srs_close_draw_index = -1 self.face_library = DBManager.get_instance().get_all_face() self.face_work = None self.face_model_name = "rockface-data" # self.init_frpc_open_status()
这是一个名为 HelmetManager 的类的构造函数,它接受三个参数:width、height 和 route_list。其中,width 和 height 分别表示窗口的宽和高,route_list 是一个列表,用于存储数据路径。
在函数中,首先将这三个参数赋值给类的属性。然后,初始化了一些其他属性,例如 video_list、thread_pool、cache_output、cache_worker_name、video_writer_list、qt_is_show 等等。其中,video_list 是存储视频的列表,thread_pool 是线程池,cache_output 和 cache_worker_name 是缓存的输出和工作名称,video_writer_list 是存储视频写入器的列表,qt_is_show 表示 QT 是否显示,cur_page 是当前页面,init_worker_and_video() 是初始化工作和视频。
接下来,初始化了一些人脸相关的属性。其中,face_library 是获取所有人脸的数据库实例,face_work 代表人脸工作,face_model_name 是 RockFace 模型的名称。
最后,注释掉了一行代码,该代码是用于初始化 frpc 状态的。