Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
168 views
in Technique[技术] by (71.8m points)

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

当我把第二个多线程部分注释掉时,找到了小明之后,程序正常运行结束。但加上第二部分多线程后,找到小明后,第一部分好像仍然在运行。

想问问各位老司机,应该如何处理这样的多线程,感激不尽!


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

find方法里的while判断有问题,只有符合条件的才会跳出,判断 messy==1 作为while的条件


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
...