线程无法强行终止,导致不能结束主进程
如题
import threading import time import queue # 创建队列 q = queue.Queue() # 生产者 def Producer(name): for i in range(10): print(f'{name}制作了第{i+1}个小蛋糕\n', end='') time.sleep(0.1) q.put(i+1) # 将制作的小蛋糕放入队列中 # 消耗者 def Consumer(name): while True: message = q.get() print(f'{name}吃了第{message}个蛋糕,但是没付钱\n', end='') # 取出蛋糕并吃掉 if __name__ == '__main__': # 创建线程,一个生产者,三个消费者 p = threading.Thread(target=Producer, args=('慕慕',)) c1 = threading.Thread(target=Consumer, args=('小明',)) c2 = threading.Thread(target=Consumer, args=('小红',)) c3 = threading.Thread(target=Consumer, args=('安安',)) for i in (p, c1, c2, c3): i.start() p.join() for i in (c1, c2, c3): print(i.is_alive()) i.terminate() # 线程对象没有这个方法
18
收起
正在回答 回答被采纳积分+1
1回答
Mr朱_
2023-05-28 10:31:43
接收端设置了超时退出,只是避免无线循环。
还是不能主动结束线程
代码:
# coding:utf-8 import threading import time import queue # 创建队列 q = queue.Queue() # 生产者 def Producer(name): for i in range(10): print(f'{name}制作了第{i + 1}个小蛋糕\n', end='') time.sleep(0.1) q.put(i + 1) # 将制作的小蛋糕放入队列中 # 消耗者 def Consumer(name): while True: try: message = q.get(timeout=1) print(f'{name}吃了第{message}个蛋糕,但是没付钱\n', end='') except: break # 取出蛋糕并吃掉 if __name__ == '__main__': # 创建线程,一个生产者,三个消费者 p = threading.Thread(target=Producer, args=('慕慕',)) c1 = threading.Thread(target=Consumer, args=('小明',)) c2 = threading.Thread(target=Consumer, args=('小红',)) c3 = threading.Thread(target=Consumer, args=('安安',)) for i in (p, c1, c2, c3): i.start() for i in (p, c1, c2, c3): i.join()
Python全能工程师
- 参与学习 人
- 提交作业 16233 份
- 解答问题 4470 个
全新版本覆盖5大热门就业方向:Web全栈、爬虫、数据分析、软件测试、人工智能,零基础进击Python全能型工程师,从大厂挑人到我挑大厂,诱人薪资在前方!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星