• Even事件


    Even事件

    1,定义

    • 同进程的一样 ,线程的一个关键特性是每个线程都是独立运行且状态不可预测。如果程序中的其 他线程需要通过判断某个线程的状态来确定自己下一步的操作,这时线程同步问题就会变得非常棘手。为了解决这些问题,我们需要使用threading库中的Event对象。 对象包含一个可由线程设置的信号标志,它允许线程等待某些事件的发生。在 初始情况下,Event对象中的信号标志被设置为假。如果有线程等待一个Event对象, 而这个Event对象的标志为假,那么这个线程将会被一直阻塞直至该标志为真。一个线程如果将一个Event对象的信号标志设置为真,它将唤醒所有等待这个Event对象的线程。如果一个线程等待一个已经被设置为真的Event对象,那么它将忽略这个事件, 继续执行

    • import time
      from threading import Thread, current_thread, Event
      event = Event()
      
      
      def check():
          print(f'{current_thread().name}监测服务器是否开启')
          time.sleep(1)
          print(event.is_set())
          event.set()
          print(event.is_set())
          print('服务器已经开启')
      
      
      def connect():
          print(f'{current_thread().name} 等待连接')
          event.wait()
          #event.wait(1)  # 只阻塞1秒,1秒之后如果还没有进行set 直接进行下一步操作.
          print(f'{current_thread().name}连接成功')
      
      
      if __name__ == '__main__':
          t1 = Thread(target=check,)
          t2 = Thread(target=connect,)
          t1.start()
          t2.start()
      #######################################
      Thread-1监测服务器是否开启
      Thread-2 等待连接
      False
      True
      服务器已经开启
      Thread-2连接成功
      
    • 实例
      from threading import Thread
      from threading import current_thread
      from threading import Event
      import time
      
      event = Event()
      def check():
          print(f'{current_thread().name} 监测服务器是否开启...')
          time.sleep(4)
          event.set()
          print('服务器已经开启...')
      
      def connect():
          count = 1
          while not event.is_set():
              if count == 4:
                  print('连接次数过多,已断开')
                  break
              event.wait(1)
              print(f'{current_thread().name} 尝试连接{count}次')
              count += 1
          else:
              print(f'{current_thread().name} 连接成功...')
      
      t1 = Thread(target=check,)
      t2 = Thread(target=connect,)
      t1.start()
      t2.start()
      ################################
      Thread-1 监测服务器是否开启...
      Thread-2 尝试连接1次
      Thread-2 尝试连接2次
      Thread-2 尝试连接3次
      连接次数过多,已断开
      服务器已经开启...
      ################################
      服务器睡3秒以下
      Thread-1 监测服务器是否开启...
      Thread-2 尝试连接1次
      Thread-2 尝试连接2次
      服务器已经开启...
      Thread-2 尝试连接3次
      Thread-2 连接成功...
      
    希望你眼眸有星辰,心中有山海,从此以梦为马,不负韶华
  • 相关阅读:
    【题解】【字符串】【BFS】【Leetcode】Word Ladder
    Python CSV模块处理文件读写
    【题解】【排列组合】【回溯】【Leetcode】Generate Parentheses
    【题解】【链表】【Leetcode】Linked List Cycle II
    【题解】【排列组合】【回溯】【Leetcode】Gray Code
    【题解】【位操作】【Leetcode】Single Number II
    【题解】【数组】【查找】【Leetcode】Search Insert Position
    JAVAWEB的Listener
    Hibernate的检索方式--查询数据的方式
    Hibernate的批量处理和分页技术、投影技术
  • 原文地址:https://www.cnblogs.com/daviddd/p/12034447.html
Copyright © 2020-2023  润新知