Python threading 线程跳不出来 后面代码无法继续执行 问题

遇到同样的问题,
线程调用的方法里 while True 就跳不出这个线程 结束while循环 while 外面的

def startsendfile(self,filelist,taskpath,filetypepath):

    for k in range(2):
        # new_thread = threading.Thread(target=self.booth(k,filelist,taskpath,filetypepath))
        new_thread = threading.Thread(target=self.booth,args=(k,filelist,taskpath,filetypepath))
        # new_thread.setDaemon(True)
        self.thread_list.append(new_thread)
    for t in self.thread_list:
        t.start()
    for t in self.thread_list:
        t.join()
    print("所有线程都结束了", time_now())

线程调用方法


def booth(self,tid, filelist,taskpath,filetypepath):
    global thread_data_num
    global lock
    while True:
        self.lock.acquire()
        print(self.thread_data_num)
        if self.thread_data_num != 0:
            self.thread_data_num = self.thread_data_num - 1
            item = filelist[self.thread_data_num]
            time.sleep(10)
        else:
            break
        self.lock.release()
    print("出来了么")
    

结果打印了===> 出来了么

却没有执行打印 ===> 所有线程都结束了

阅读 5.3k
2 个回答

break前没有释放锁,死锁了

你给出的代码中thread_data_num一直为0,所以booth里面的循环会立即break,才会打印:出来了么,由于startsendfile中线程全部在t.join()位置阻塞,所以线程一直在等待中,不会打印:所有线程都结束了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题