zoukankan      html  css  js  c++  java
  • day10_主线程等待子线程的两种方式

    import threading,time

    def axb(name):

        time.sleep(1)

        print('哈哈',name)

    for i in range(10):

       t = threading.Thread(target = axb,args = (i,)) # 实例化一个线程,启动一个线程,10个子线程一起执行axb函数,先暂停1秒

       t.start()

    print('game over')

    # 有1个主线程,10个子线程,先执行主线程,主线程创建完10个子线程,不暂停直接输出,子线程要暂停1秒再执行axb里面的代码才输出

    如果在for循环里写t.join(),只等待最后一个线程,线程和线程之间是相互独立的

     

    import threading
    import time


    def down_load():
    time.sleep(5)
    print('运行完了')


    def movie():
    time.sleep(1)
    print('看电影')


    start_time = time.time()
    for i in range(10):
    t = threading.Thread(target=down_load)
    t.start()

    for j in range(5):
    t = threading.Thread(target=movie)
    t.start()
    print(threading.activeCount()) # 查看当前线程数,打印出16(1个主线程,15个子线程)
    print(threading.current_thread()) # 查看当前线程,打印出<_MainThread(MainThread, started 35028)>
    end_time = time.time()
    # 运行时先打印end_time - start_time,然后运行5次看电影,再运行10次运行完了
    print(end_time - start_time)

     

    主线程等待的两种方式(第一种,比较麻烦):

    import threading
    import time


    def movie():
    time.sleep(1)
    print('看电影')


    thread_list = []
    start_time = time.time()

    for j in range(5):
    t = threading.Thread(target=movie)
    t.start()
    thread_list.append(t)

    for thread in thread_list:
    thread.join() # 主线程等待子线程

    print(threading.activeCount()) # 查看当前线程数,打印出1,主线程等待五个子线程都运行完了
    print(threading.current_thread()) # 查看当前线程,打印出<_MainThread(MainThread, started 29960)>
    end_time = time.time()
    # 运行时先运行5次看电影,然后主线程往下走,代码一次运行
    print(end_time - start_time)

    主线程等待的两种方式(第二种,根据当前线程数判断,如果当前线程数等于1,证明子线程都执行完了,不用定义list,也不用循环list,定义一个死循环,什么都不做):

    import threading
    import time


    def movie():
    time.sleep(1)
    print('看电影')


    start_time = time.time()

    for j in range(5):
    t = threading.Thread(target=movie)
    t.start()

    while threading.activeCount() != 1: # !=1让它继续循环,直到子线程结束运行
    pass

    print(threading.activeCount()) # 查看当前线程数,打印出1,主线程等待五个子线程都运行完了
    print(threading.current_thread()) # 查看当前线程,打印出<_MainThread(MainThread, started 29960)>
    end_time = time.time()
    # 运行时先运行5次看电影,然后主线程往下走,代码一次运行
    print(end_time - start_time)
  • 相关阅读:
    【PASOTTIPASOTTI 伞】PASOTTI黑色聚酯纤维伞 Style 478
    乐雨 德国happyrain 超大男士高尔夫伞 直柄伞 双人伞 双层伞面防风雨伞 黑色【图片 价格 品牌 报价】-京东
    Larmes琅幕仕家居马头长款短柄自动雨伞 晴雨两用太阳伞防紫外线遮阳男士商务伞 雨伞雨具 骏马长款-金色配饰【图片 价格 品牌 报价】-京东
    Planner – 项目管理软件
    Project Server 2010安装部署手册(1.5版)
    Serena Software :: pod-update
    ]project-open[ 中国 功能一览
    几块钱或许能治好你的白发(2)
    爱心日式便当 给爸爸妈妈的爱心便当
    给老公做的爱心便当,持续更新!-西餐-19楼私房菜-杭州19楼
  • 原文地址:https://www.cnblogs.com/laosun0204/p/8594553.html
Copyright © 2011-2022 走看看