菜鸟IT的博客
"菜鸟IT"的博客 (WWW.17WX.NET)
熟悉HTML网站的前端美工到切图制作,搭配DIV+TABLE+CSS,熟悉Fireworks和Dreamwear的网站制作实战应用,专注于学习和记录JS脚本对于网页改造的各种新奇技术.平时的工作既要做销售,也要做前端开发,也要做后期的客户售后维护,此博客为博主自己平时的IT工作的实战学习笔记,记录自己工作和学习中遇到的各种坑,也分享给有需要的新人...
博客首页 网站前端制作 网赚 软件应用 Windows系统 Python
谷歌联盟提供的广告↓
[网站前端制作]有关标签↓
[网赚]有关标签↓
[软件应用]有关标签↓
[Windwos系统]有关标签↓
 | 
菜鸟IT的博客 >> Python

练习多线程案例:主线程上开9个子线程,出去干活(每个子线程干活的时间不一样,干活拿回来的结果也不一样),哪个先干完,把结果给主线程,然后主线程输出结果,其他子线程没干完也都自动关闭。| 需要用到多线程、和setDaemon方法,还有while循环监控1个全局变量结果。
# encoding:utf-8
# -*- coding:utf-8 -*-

import threading # 关于多线程的库,主要是登录窗口,避免显示不响应状态,单独开启1个线程去获取公网IP
import random # 用于生成随机的等待秒数
import time # 用于程序等待时间,模拟不同的子程序完成任务的进度是不一样的。因为网络抓取数据的响应时间不一样。

# 定义1个列表,里面是数字,用于秒数,只有2到10,为什么没有1呢。这个1秒。我是留给主线程的。主线程我不设置等待时间。
Time_Seconds_List=[2,3,4,5,6,7,8,9,10]
# 定义1个列表,里面就2个字符串,
RenWu_JieGuo_List=["Yes","No"]
# 定义1个空字符串,这个是全局变量。用于最先完成任务的子线程,跟主线程报备的赋值。
I_am_Done=""


# 随机获取9次,看看获取的结果的样子,先玩1波,看看随机效果。
# for i in range(1,9+1):
#     SuiJiShu = random.choice(Time_Seconds_List)
#     print("第",i,"次获取随机数:",SuiJiShu)

# ————————————————————————
# 看看打印结果↓
# 第 1 次获取随机数: 9
# 第 2 次获取随机数: 6
# 第 3 次获取随机数: 8
# 第 4 次获取随机数: 2
# 第 5 次获取随机数: 2
# 第 6 次获取随机数: 7
# 第 7 次获取随机数: 2
# 第 8 次获取随机数: 7
# 第 9 次获取随机数: 2
# ————————————————————————

# 我测试模拟1个任务,我分9个线程出去。
# 每个子线程出去干活的完成等待时间是随机不确定的。
# 每个子线程出去干活以后,拿回来的结果也是不确定的结果,我这里就定为返回值就2个字符串“Yes”或者“No”,这个结果也是不确定的。

# ————————————————————————

# 开始定义子线程1号。用于测试,返回的是元组结果。
def ZiXianCheng_1():
    SuiJiShu=random.choice(Time_Seconds_List)
    time.sleep(SuiJiShu)
    global I_am_Done
    I_am_Done="我是1号,我完成任务了!"
    return random.choice(RenWu_JieGuo_List),str(SuiJiShu),"我是1号"

# 再玩1波,让同样这个子线程,重复干9次活,看看结果
# for i in range(1,9+1):
#     print(ZiXianCheng_1())
# ————————————————
# 看看输出结果:
# ('Yes', '7')
# ('Yes', '2')
# ('No', '7')
# ('Yes', '6')
# ('Yes', '9')
# ('No', '2')
# ('Yes', '8')
# ('No', '9')
# ('Yes', '9')
# ————————————————
# 接下来。我再弄另外8个子线程。
# 为了更真实的模拟,9个子线程,出去干活,虽然干同样的活,但是面对的对象不一样,后期写的代码也不一样。

def ZiXianCheng_2():
    SuiJiShu=random.choice(Time_Seconds_List)
    time.sleep(SuiJiShu)
    global I_am_Done
    I_am_Done = "我是2号,我完成任务了!"
    return random.choice(RenWu_JieGuo_List),str(SuiJiShu),"我是2号"

def ZiXianCheng_3():
    SuiJiShu=random.choice(Time_Seconds_List)
    time.sleep(SuiJiShu)
    global I_am_Done
    I_am_Done = "我是3号,我完成任务了!"
    return random.choice(RenWu_JieGuo_List),str(SuiJiShu),"我是3号"

def ZiXianCheng_4():
    SuiJiShu=random.choice(Time_Seconds_List)
    time.sleep(SuiJiShu)
    global I_am_Done
    I_am_Done = "我是4号,我完成任务了!"
    return random.choice(RenWu_JieGuo_List),str(SuiJiShu),"我是4号"

def ZiXianCheng_5():
    SuiJiShu=random.choice(Time_Seconds_List)
    time.sleep(SuiJiShu)
    global I_am_Done
    I_am_Done = "我是5号,我完成任务了!"
    return random.choice(RenWu_JieGuo_List),str(SuiJiShu),"我是5号"

def ZiXianCheng_6():
    SuiJiShu=random.choice(Time_Seconds_List)
    time.sleep(SuiJiShu)
    global I_am_Done
    I_am_Done = "我是6号,我完成任务了!"
    return random.choice(RenWu_JieGuo_List),str(SuiJiShu),"我是6号"

def ZiXianCheng_7():
    SuiJiShu=random.choice(Time_Seconds_List)
    time.sleep(SuiJiShu)
    global I_am_Done
    I_am_Done = "我是7号,我完成任务了!"
    return random.choice(RenWu_JieGuo_List),str(SuiJiShu),"我是7号"

def ZiXianCheng_8():
    SuiJiShu=random.choice(Time_Seconds_List)
    time.sleep(SuiJiShu)
    global I_am_Done
    I_am_Done = "我是8号,我完成任务了!"
    return random.choice(RenWu_JieGuo_List),str(SuiJiShu),"我是8号"

def ZiXianCheng_9():
    SuiJiShu=random.choice(Time_Seconds_List)
    time.sleep(SuiJiShu)
    global I_am_Done
    I_am_Done = "我是9号,我完成任务了!"
    return random.choice(RenWu_JieGuo_List),str(SuiJiShu),"我是9号"

# ————————————————
# 定义1个主线程,把这9个子线程,都加到这个主线程里。
def MainBoss():
    t1 = threading.Thread(target=ZiXianCheng_1, args=())
    t1.setDaemon(True)
    t1.start()

    t2 = threading.Thread(target=ZiXianCheng_2, args=())
    t2.setDaemon(True)
    t2.start()

    t3 = threading.Thread(target=ZiXianCheng_3, args=())
    t3.setDaemon(True)
    t3.start()

    t4 = threading.Thread(target=ZiXianCheng_4, args=())
    t4.setDaemon(True)
    t4.start()

    t5 = threading.Thread(target=ZiXianCheng_5, args=())
    t5.setDaemon(True)
    t5.start()

    t6 = threading.Thread(target=ZiXianCheng_6, args=())
    t6.setDaemon(True)
    t6.start()

    t7 = threading.Thread(target=ZiXianCheng_7, args=())
    t7.setDaemon(True)
    t7.start()

    t8 = threading.Thread(target=ZiXianCheng_8, args=())
    t8.setDaemon(True)
    t8.start()

    t9 = threading.Thread(target=ZiXianCheng_9, args=())
    t9.setDaemon(True)
    t9.start()

    # 主线程就一直监控“I_am_Done”这个字符串。只能是while了。
    # 一旦发现这个I_am_Done长度大于0,就表示有子线程完成任务了。
    # 打印出这个字符串的值,就知道是哪个子线程先完成任务了。退出while循环。
    while(True):
        if (len(I_am_Done)>0):
            break
    return I_am_Done

print(MainBoss())

# ——————————————————————————
# 看看输出结果,完美!!!!!!


我是7号,我完成任务了!

Process finished with exit code 0

菜鸟IT博客[2022.03.27-17:31] 访问:302
[关闭窗口]  
Google公司(谷歌联盟)提供的广告↓
本页的htm伪静态链接网址:分享链接加载中....

收藏链接: www.ems-help.com | www.17post.com | www.17track.wang | www.kd100.wang | www.17wx.net | www.11185cha.com | www.sftrack.net | www.kdjiage.com | m.kdjiage.com | www.expba.net | m.expba.net | www.pptrack.net
学习Python的关键点
【1】★ Python:解决小数点后面四舍五入的精度丢失问题(二进制转换导致,另解决prec动态保留小数点后多少位)
【2】 ★ Python:单个py文件打包exe程序
【3】 ★ 给自己写的exe程序加上注册授权保护
【4】 ★ Python的http请求超时设置(timeout)| 异常类型/捕获异常
【5】 ★ Python的多线程的线程池的使用| ThreadPoolExecutor
【6】 ★ Python能用到的免费代理IP网址
【7】 ★ Python_用于测试代理IP是否有效
【8】 ★ Python Requests post() 方法 | post方式提交api
【9】 ★★★ Python Tkinter Gui视频学习教程
【10】 ★★★ Python 小项目实战-视频学习教程
【11】 ★★★ Python 爬虫项目实战-视频教程
【12】 ★★★ 高级进阶的关于python的五本书: 「Python从菜鸟到高手」、「html5+css3+JavaScript从入门到精通」、「Django Web应用开发实战」、「漫画算法」
【13】 ★★★ Request库-爬虫
【14】 ★★★ Python 图形识别文字
【15】 ★★★ Python 滑动验证码识别【图文教程】
【16】 ★★★ Python 滑动验证码识别【视频教程】
【18】 ★★★ Python 关于Class类的应用【视频教程】
【19.1】 ★★★ Python 关于进度条的制作(1)
【19.2】 ★★★ Python 关于进度条的制作(2)
【20】★★★ Python 抓取某宝的商品信息
【21】★★★ Python 一小时学会全栈开发浏览器版本的企业管理系统【视频教程】
【22】★★★ Python 全栈开发——前端+后端【视频教程】
【23】★★★ Layui 浏览器前端模块化UI框架
【24】★★★ Python-Django-Web应用开发【视频教程】
【25】★★★ Python 从0开始学【视频教程】
【26】★★★ Python的tkinter界面打包exe以后关于icon图标报错的解决办法!
【27】★★★ Python的tkinter视频学习教程【N个系统性学习合集视频】★★★
【28】★★★ Python全栈开发【视频教程】★★★
Copyright © 17WX.NET 版权所有 Manage 沪ICP备13006304号-5 沪公网安备31011702006630号
,sitemap.html,sitemap.xml
网站人气值: