线程无法强行终止,导致不能结束主进程
如题
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全能工程师
- 参与学习 人
- 提交作业 16416 份
- 解答问题 4469 个
全新版本覆盖5大热门就业方向:Web全栈、爬虫、数据分析、软件测试、人工智能,零基础进击Python全能型工程师,从大厂挑人到我挑大厂,诱人薪资在前方!
了解课程

恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星