事件

"""
    事件   911 刘强东事件   火烧圆明园


    事件是一个通知信息, 表示什么时间发生了什么事情

    用于线程间通讯
    线程间 本来就是数据共享的  也就是说 即使没有事件这个东西 也是没问题的

    线程之间,执行流程是完全独立的,一些时候可能需要知道另一个线程发生了什么 然后采取一些行动
    这时候就可以使用事件来简化代码

    事件其实就是帮你维护了一个bool值
    在bool为True之前  wait函数将一直阻塞,这样一来就避免了不断的询问对方的状态

    假设 有两条线程 一个用于开启服务器  一个用于连接服务器
    连接服务器一定要保证 服务器已经启动成功了,服务器启动需要花费一些时间,

"""
import  time,random
from threading import Thread,Event
# 使用事件
# 一个事件
boot = Event()

def boot_server():
    print("正在启动服务器.......")
    time.sleep(random.randint(2,5))
    print("服务器启动成功.......")
    boot.set()


def connect_server():
    print("开始尝试连接.....")
    boot.wait() # 是一个阻塞函数  会一直等到set()函数被调用
    print("连接服务器成功!")


t1 = Thread(target=boot_server)
t1.start()

t2 = Thread(target=connect_server)
t2.start()



# 不使用事件
# 默认未启动
# is_boot = False
#
# def boot_server():
#     global is_boot
#     print("正在启动服务器.......")
#     time.sleep(random.randint(2,5))
#     print("服务器启动成功.......")
#     # 修改状态为True
#     is_boot = True
#
#
# def connect_server():
#     while True:
#         if is_boot:
#             print("连接服务器成功!")
#             break
#         else:
#             print("连接失败 服务器未启动....")
#             time.sleep(1)
#
# t1 = Thread(target=boot_server)
# t1.start()
#
# t2 = Thread(target=connect_server)
# t2.start()
#

 

posted on 2019-03-11 17:44  小胖子方法  阅读(156)  评论(0编辑  收藏  举报

导航