为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

LEATH 2018-11-21 05:02:23
遇到同样的问题,线程调用的方法里 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("出来了么")结果打印了===> 出来了么却没有执行打印 ===> 所有线程都结束了
查看完整描述

2 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

break前没有释放锁,死锁了

查看完整回答
反对 回复 2018-11-28
?
慕容3067478

TA贡献1773条经验 获得超3个赞

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

查看完整回答
反对 回复 2018-11-28
  • 2 回答
  • 0 关注
  • 2507 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信