zoukankan      html  css  js  c++  java
  • 事件,条件

    事件

    • 其实就是开两条线程,一条进行数据传输
    • 另外一条,查看网络是否安全,如果不行就会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() 方法
    
    
    
  • 相关阅读:
    linux使用rm-rf删除之文件恢复
    性能测试常见瓶颈分析及调优方法
    性能压测QPS 和 TPS区别
    Linux查看系统性能
    Python中split()和split(" ")的区别
    Python-标准库之functools
    Python-内置函数_@propery、@classmethod、@staticmethod详解
    Python-类的内置方法中__repr__和__str__的区别
    Python-标准库之运算符替代函数Operator
    Python-标准库之迭代器-itertools
  • 原文地址:https://www.cnblogs.com/xiongchao0823/p/11552405.html
Copyright © 2011-2022 走看看