为什么子线程没有运行
相关代码:
"""
幼儿园举办捡豆子比赛,三个小朋友一组,
将地上的 30 颗豆子捡起来,每个小朋友捡起一颗豆子,
随机耗时1-3秒,请运用多线程相关的知识,
编程实现三个小朋友捡豆子,并看看谁捡的豆子多
"""
import random
import threading
import time
ranking = []
douzi = list(range(1,31))
count = 0
def douzi_jian():
while len(douzi) > 1:
t = threading.current_thread()
sleep_time = random.randint(1,3)
choice = random.choice(douzi)
douzi.remove(choice)
print('{}捡起了一颗豆子,豆子的编号为{}'.format(t.name,choice))
ranking.append(t.name,count)
print('{}完成了比赛'.format(t.name))
class ChidThread1(threading.Thread):
def douzi(self):
douzi_jian()
class ChidThread2(threading.Thread):
def douzi(self):
douzi_jian()
class ChidThread3(threading.Thread):
def douzi(self):
douzi_jian()
chid1_thread = ChidThread1(name="小朋友1")
chid2_thread = ChidThread2(name="小朋友2")
chid3_thread = ChidThread3(name="小朋友3")
chid1_thread.start()
chid2_thread.start()
chid3_thread.start()
chid1_thread.join()
chid2_thread.join()
chid3_thread.join()
print('本次比赛的排名结果为:{}'.format(ranking))8
收起
正在回答 回答被采纳积分+1
1回答
好帮手慕小猿
2025-03-13 09:54:09
同学,你好!1、线程的执行方法是run方法,继承 threading.Thread 类并重写 run 方法,能够清晰地定义线程要执行的任务,定义线程类时所有的douzi()方法应改成run()方法,例ChildThread1线程类修改如下:

2、ranking是列表,append追加元素时,参数只能写一个,可将线程名加入到ranking列表内,修改如红框

3、同学定义了随机数用于time.sleep()进入睡眠状态,利于线程切换,但同学没有使用time.sleep(),time.sleep()应用在从列表中移除捡到的豆子后,再执行time.sleep(),添加代码如下:

完整代码参考如下:
import random
import threading
import time
ranking = []
douzi = list(range(1, 31))
count = 0
def douzi_jian():
while len(douzi) > 1:
t = threading.current_thread()
sleep_time = random.randint(1, 3)
choice = random.choice(douzi)
douzi.remove(choice)
time.sleep(sleep_time)
print('{}捡起了一颗豆子,豆子的编号为{}'.format(t.name, choice))
ranking.append(t.name)
print('{}完成了比赛'.format(t.name))
class ChidThread1(threading.Thread):
def run(self):
douzi_jian()
class ChidThread2(threading.Thread):
def run(self):
douzi_jian()
class ChidThread3(threading.Thread):
def run(self):
douzi_jian()
chid1_thread = ChidThread1(name="小朋友1")
chid2_thread = ChidThread2(name="小朋友2")
chid3_thread = ChidThread3(name="小朋友3")
chid1_thread.start()
chid2_thread.start()
chid3_thread.start()
chid1_thread.join()
chid2_thread.join()
chid3_thread.join()
print('本次比赛的排名结果为:{}'.format(ranking))祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星