Event事件

Posted chuwanliu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()

以上是关于Event事件的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript之DOM-8 Event对象(事件概述事件处理event对象)

阻止事件冒泡和事件默认行为

Event事件

jQuery事件对象event的属性和方法

event对象的理解

HTML DOM Event对象