首页 新闻 搜索 专区 学院

python退出程序,线程阻塞了没有退出,求解决方法

0
悬赏园豆:200 [待解决问题]

def receive_thread(number):
srv = POP3(host=self.url, timeout=5)
srv.user(email_name)
srv.pass_(email_pwd)
rsp, lines, octets = srv.retr(number)
msg_byte = b'\r\n'.join(lines)
msg_content = msg_byte.decode(chardet.detect(msg_byte)['encoding'])
msg = Parser().parsestr(msg_content)

def email_download():
with ThreadPoolExecutor(max_workers=6) as pool:
numbers =200
futures = [pool.submit(receive_thread, i) for i in range(numbers, 0, -1)]
for future in futures:
print(future.result())

t1 = threading.Thread(target=email_download)
t1.start()

只要带有网络请求的就会被阻塞,导致线池的线程被阻塞了,程序退出了,线程没有退出求解决方案,谢谢!

PoppinDream的主页 PoppinDream | 初学一级 | 园豆:2
提问于:2022-11-29 12:23
< >
分享
所有回答(1)
0

t1.setDaemon(True)

Adming | 园豆:123 (初学一级) | 2022-11-30 09:45

设置这个没有用

支持(0) 反对(0) PoppinDream | 园豆:2 (初学一级) | 2022-11-30 10:03

@PoppinDream:
没看到还有用到 ThreadPoolExecutor,这种情况用 shutdownNow() 手动关闭线程池就是了。

注意:调用ShutdownNow()并不能百分百保证线程池就一定能立即退出,但是大多数时候是可以的。要百分百控制保证,只有给每个任务加一个立即结束的机制了。

支持(0) 反对(0) Adming | 园豆:123 (初学一级) | 2022-11-30 10:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册