python多线程控制问题
代码如下
import threading
import time
messy = 0
pplInfo = []
def find(ppl, ):
global messy, pplInfo
while True:
print('{}的身高为{}cm,{}kg'.format(ppl[0], ppl[1][0], ppl[1][1]))
time.sleep(1)
if int(ppl[1][0]) > 180:
pplInfo = [ppl[0], '高个子']
messy = 1
break
def do(act, pplInfo):
while True:
time.sleep(2)
print('{}是{},适合{}'.format(pplInfo[0], pplInfo[1], act))
if __name__ == '__main__':
pplDict = {
'张三': ['172', '65'],
'李四': ['180', '100'],
'小明': ['200', '130'],
'王五': ['159', '45'],
}
Th = []
for ppl in pplDict.items():
th = threading.Thread(target=find, args=(ppl,))
th.daemon = 1
th.setDaemon(True)
Th.append(th)
for thread in Th:
thread.start()
while 1:
if messy:
break
print('线程已退出!')
print('找到人选了:{}'.format(pplInfo))
Th2 = []
activity = ['踢足球', '打排球', '跳高', '跳远', '游泳']
for act in activity:
th2 = threading.Thread(target=do, args=(act, pplInfo))
th2.start()
希望实现的功能是:
先多线程从人物列表里找到身高180以上的人,找到后退出第一个多线程部分。然后再多线程循环输出这个人适合的体育项目。程序运行后效果是下面这样,就是第一个多线程部分仍然在运行:
张三的身高为172cm,65kg
李四的身高为180cm,100kg
小明的身高为200cm,130kg
王五的身高为159cm,45kg
线程已退出!
找到人选了:['小明', '高个子']
王五的身高为159cm,45kg
李四的身高为180cm,100kg
张三的身高为172cm,65kg
小明是高个子,适合跳高
小明是高个子,适合打排球
小明是高个子,适合踢足球
小明是高个子,适合游泳
小明是高个子,适合跳远
张三的身高为172cm,65kg
王五的身高为159cm,45kg
李四的身高为180cm,100kg
张三的身高为172cm,65kg
小明是高个子,适合游泳
小明是高个子,适合踢足球
张三的身高为172cm,65kg
王五的身高为159cm,45kg
李四的身高为180cm,100kg
当我把第二个多线程部分注释掉时,找到了小明之后,程序正常运行结束。但加上第二部分多线程后,找到小明后,第一部分好像仍然在运行。
想问问各位老司机,应该如何处理这样的多线程,感激不尽!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
find
方法里的while判断有问题,只有符合条件的才会跳出,判断messy
==1 作为while的条件