python多线程控制问题

发布于 2022-09-12 04:42:00 字数 1731 浏览 14 评论 0

代码如下

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

莫多说 2022-09-19 04:42:01

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文