self.thread1 线程不加self可以吗?
时间: 2023-08-19 20:04:11 浏览: 58
在Python中,如果你想要在一个类的方法中访问该类的实例变量,你需要在变量名前面加上self关键字。self表示类的实例本身,通过它可以访问该实例的属性和方法。因此,在访问self.thread1时,你需要在thread1前面加上self关键字。
如果你不加self关键字,Python会将thread1视为一个局部变量,而不是一个实例变量,从而导致访问不到该变量。因此,为了避免这种情况发生,你需要在访问实例变量时始终使用self关键字。
相关问题
# # 多线程实例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机制是否正常工作。
# # 多线程实例3 method = [RTYtrend,OTDTrend,DDHTrend,PROTrend,Show_s,Show_q,Show_d,Show_i,Show_p,Show_allongoing,Show_status, s_daily,q_daily,d_daily,i_daily,p_daily] #字典 thread = [] worker = [] for i in range(len(method)): thread.append('thread' + str(i)) worker.append('worker' + str(i)) print(worker) for j in range(len(method)): self.thread[j] = QThread() self.worker[j] = Worker() self.worker[j].moveToThread(self.thread[j]) self.thread[j].started.connect(self.worker[j].run) self.worker[j].finished.connect(self.thread[j].quit) self.worker[j].finished.connect(self.worker[j].deleteLater) self.thread[j].finished.connect(self.thread[j].deleteLater) #self.worker[j].finished.connect(lambda j=j: method[j]()) # Start the thread self.thread[j].start()报警:status'builtin_function_or_method' object does not support item assignment怎么解决?
这个报警的原因是你在使用 `self.thread[j]` 和 `self.worker[j]` 时,将它们定义为列表,但是在下面的代码中,你又将它们分别赋值为 QThread 和 Worker 类的实例。所以在 `self.thread[j] = QThread()` 和 `self.worker[j] = Worker()` 的语句中,你试图将列表中的元素替换为 QThread 和 Worker 类的实例,但是 Python 中函数和方法是不支持赋值的,所以报出了该错误。
要解决这个问题,你可以将 `self.thread` 和 `self.worker` 定义为字典而不是列表,这样就可以通过键名来引用对应的 QThread 和 Worker 实例了。具体来说,你可以将 `thread = []` 和 `worker = []` 改为 `self.thread = {}` 和 `self.worker = {}`,然后将 `self.thread[j]` 和 `self.worker[j]` 改为 `self.thread[thread[j]]` 和 `self.worker[worker[j]]` 即可。
阅读全文