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
    
    
    
    
  • 相关阅读:
    正向代理和反向代理
    Unicode
    utf-8
    ISO 8895-1
    ProtocalBuffers学习记录
    C#基础知识
    MSBuild学习记录
    Linux学习笔记
    Jenkins学习记录
    CruiseControl.Net学习记录
  • 原文地址:https://www.cnblogs.com/zh-xiaoyuan/p/11774298.html
Copyright © 2011-2022 走看看