Event事件

线程间状态同步

你把一个任务丢到了子线程中, 这个任务将异步执行 ,如何获取到这个任务的执行状态

执行状态 执行结果不是一个概念

如果需要拿到 执行结果 可以采用异步回调

假设

一个线程 负责启动服务器 启动服务器需要花一定的时间

另一个线程作为客户端 要连接服务器 必须保证服务器已经启动

要获取状态可以采永轮训的方法 但是浪费了CPU资源 而且可能会造成延迟 不能立即获取状态

就可以使用事件来完成状态同步

事件本质就是 一个标志 可以是False 或是True

特殊之处在于 其包含一个wait函数 可以阻塞当前线程 直到状态从False变为True

from threading import  Thread,Event
import time

# is_boot = False
e = Event()


def start_server():
    # global is_boot
    print("starting server......")
    time.sleep(3)
    print("server started!")
    # is_boot = True
    # 修改事件的值为True
    e.set()


def connect_server():
    e.wait() # 等待事件从False 变为true
    if e.is_set():
        print("连接服务器成功!")
    # while True:
    #     if is_boot:
    #         print("连接服务器成功!")
    #         break
    #     else:
    #         print("失败 服务器未启动!")
    #     time.sleep(0.5)



t1 = Thread(target=start_server)

t2 = Thread(target=connect_server)

t1.start()
t2.start()
原文地址:https://www.cnblogs.com/chuwanliu/p/11177037.html