zoukankan      html  css  js  c++  java
  • 线程Event

    版本一:

    from threading import Event,current_thread,Thread
    import time
    
    event=Event()  #造一个对象,内部维护一个全局变量,状态为False
    
    def check():
        print('%s 正在检测服务是否正常....' %current_thread().name)
        time.sleep(3)     #模拟检测过程
        event.set()     #把全局变量由False改为True
    
    
    def connect():
        print('%s 等待连接...' %current_thread().name)
        event.wait()    #循环等待全局变量是否变了,直到event.set()执行了全局变量才会变
        print('%s 开始连接...' % current_thread().name)
    
    #模拟链接请求
    if __name__ == '__main__':
        t1=Thread(target=connect)
        t2=Thread(target=connect)
        t3=Thread(target=connect)
    
        c1=Thread(target=check)
    
        t1.start()
        t2.start()
        t3.start()
        c1.start()

    打印结果

    Thread-1 等待连接...
    Thread-2 等待连接...
    Thread-3 等待连接...
    Thread-4 正在检测服务是否正常....
    Thread-1 开始连接...Thread-2 开始连接...Thread-3 开始连接...

    版本二:

    对尝试链接次数进行约束限制,如果链接次数大于3,结束链接操作

    
    
    from threading import Event,current_thread,Thread
    import time
    
    event=Event()
    
    def check():
        print('%s 正在检测服务是否正常....' %current_thread().name)
        time.sleep(5)
        event.set()
    
    def connect():
        count=1
        while not event.is_set():  #判断全局变量是否被设置过
            if count ==  4:
                print('尝试的次数过多,请稍后重试')
                return
            print('%s 尝试第%s次连接...' %(current_thread().name,count))
            event.wait(1)
            count+=1
        print('%s 开始连接...' % current_thread().name)
    
    if __name__ == '__main__':
        t1=Thread(target=connect)
        t2=Thread(target=connect)
        t3=Thread(target=connect)
    
        c1=Thread(target=check)
    
        t1.start()
        t2.start()
        t3.start()
        c1.start()
    
    
    打印结果:
    Thread-1 尝试第1次连接...
    Thread-2 尝试第1次连接...
    Thread-3 尝试第1次连接...
    Thread-4 正在检测服务是否正常....
    Thread-1 尝试第2次连接...
    Thread-2 尝试第2次连接...
    Thread-3 尝试第2次连接...
    Thread-2 尝试第3次连接...
    Thread-1 尝试第3次连接...
    Thread-3 尝试第3次连接...
    尝试的次数过多,请稍后重试尝试的次数过多,请稍后重试尝试的次数过多,请稍后重试
    View Code
    
    
    
    
  • 相关阅读:
    MeteoInfoLab脚本示例:Trajectory
    MeteoInfoLab脚本示例:闪电位置图
    MeteoInfoLab脚本示例:AVHRR HDF数据
    发布MeteoInfo 1.2.8
    切图,css注意事项
    C# Winform下一个热插拔的MIS/MRP/ERP框架15(窗体基类场景1)
    Xamarin Android Webview中JS调用App中的C#方法
    C# Winform下一个热插拔的MIS/MRP/ERP框架14(自动更新)
    C# Winform下一个热插拔的MIS/MRP/ERP框架13(窗体基类)
    RDLC报表的相关技巧四(报表内依照分组重置页码)
  • 原文地址:https://www.cnblogs.com/zh-xiaoyuan/p/11774298.html
Copyright © 2011-2022 走看看