• (15)线程---Condition条件


     
    功能:也是通过阻塞控制线程数量.类似信号量进程池线程池的作用

    语法:wait

    from threading import Condition

    con= Condition()

    conn.acquire()

    conn.wait() 也可以传参指定等待时间,不传参相当于阻塞,根据notify数量放行

    wait下面写上相应逻辑代码

    con.release()

    #语法: notify 使用前后加阻塞

    con.acquire()

    con.notify(5) 括号内自定义线程放行的数量,默认放行1个

    con.release()

    例:

    from threading import Condition,Thread
    import time 
    
    def func(con,index):
        print("%s在等待" % index)
        con.acquire()
        # 添加阻塞
        con.wait()
        print("%s do everyting" % index)
        con.release()
    
    con = Condition()
    
    for i in range(10):
        t = Thread(target=func,args = (con,i))
        t.start()
    
    # 写法一:传参数指定放行个数
    con.acquire()
    con.notify(5) # 不加参数(默认放行1个)
    con.release()
    
    # 写法二:动态输入放行个数
    # count = 10
    # while count > 0:
    #     num = int(input(">>>
    "))
    #     con.acquire()
    #     # 放行线程 num 动态赋予的值
    #     con.notify(num)
    #     con.release()
    #     count -= num
    View Code

    执行结果:程序只有放行完才会结束,不然会一直在阻塞状态

    0在等待
    1在等待
    2在等待
    3在等待
    4在等待
    5在等待
    6在等待
    7在等待
    8在等待
    9在等待
    1 do everyting
    2 do everyting
    4 do everyting
    0 do everyting
    3 do everyting
    View Code

     

  • 相关阅读:
    win10上使用linux命令
    leetcode--js--Median of Two Sorted Arrays
    leetcode--js--Longest Substring Without Repeating Characters
    Linux常用的命令
    微信小程序
    leetcode—js—Add Two Numbers
    PHPExcel使用
    console控制台的用法
    git中常混淆的操作
    mysql解析json下的某个字段
  • 原文地址:https://www.cnblogs.com/lyj910313/p/10787336.html
Copyright © 2020-2023  润新知