• 事件,条件


    事件

    • 其实就是开两条线程,一条进行数据传输
    • 另外一条,查看网络是否安全,如果不行就会clear(),也就是给数据传输的那条线程一个信号,
    • 主要原理就是wait()方法,只有当事件为True的时候才可以继续运行,不然就会被wait()方法阻塞住,默认是False , is_set()方法是查看事件状态的
    # 模拟拿数据断网了的操作
    
    from threading import Thread, Event
    import random
    import time
    
    e = Event()
    
    def foo():
        while 1:
            e.wait(3)  # 阻塞,如果时间状态为False则会阻塞,反之,可以通过
            time.sleep(0.6)
            if e.is_set() == True: # is_set 查看事件状态为False还是True
                print("拿到数据啦")
            else:
                print("断网了")
                break
    
    
    def foo1():
        for i in range(5):
            time.sleep(1)
            state = i
            if state != 3:
                e.set() # 如果不为3,就把他设置成True,就可以取数据
            else:
                e.clear() # 如果为3,就设置成False
    
    def foo2():
        time.sleep(4)
        e.set()
    
    t = Thread(target=foo)
    t1 = Thread(target=foo2)
    t.start()
    t1.start()
    
    

    条件

    • 总的来说条件就是一个更加复杂的锁
    # 条件其实就是更加复杂的锁
    
    from threading import Thread,Condition
    
    cond = Condition()
    
    def foo():
        cond.acquire()  #  必须包裹住 wait() 方法
        cond.wait()
        print("进来一个")
        cond.release() #  必须包裹住 wait() 方法
    
    for i in range(10):  # 设置10个线程,通过完就没有了
        t = Thread(target=foo)
        t.start()
    
    while 1:
        num = input("请输入放行的子进程个数:")  # 相当于给线程设置了个告诉加油站的收费处
        cond.acquire() #  必须包裹住 notify() 方法
        cond.notify(int(num))
        cond.release() #  必须包裹住 notify() 方法
    
    
    
  • 相关阅读:
    HTML超链接标签—链接QQ在线聊天
    超链接标签-QQ邮箱链接经验分享
    数据类型转换的事项和注释
    关键字、标识符、常量、变量的(定义)
    WendosiDOS命令的一些使用命令
    Map集合
    Set集合 HashSet集合 LInkHathSet集合
    增强for循环
    22_迭代器
    包装类
  • 原文地址:https://www.cnblogs.com/xiongchao0823/p/11552405.html
Copyright © 2020-2023  润新知