python处理多线程之间事件通讯方法

一、什么是事件

每执行一个事情,肯定有该事情的执行后状态,那事件就是该事情发生的信号

在程序中,多线程之间需要通讯,而事件就是方便线程之间的通讯

案例:

1.服务器启动需要5秒

2.客服端启动后去链接服务器

3.连接服务器必须保证服务器已经开启了

二、代码一

#使用全局变量来做判断
import time
from threading import Thread
boot = False
def server_task():
    global boot
    print("正在启动....")
    time.sleep(5)
    print("启动....成功")
    boot = True

def client_task():
    while True:
        print("连接服务器....")
        time.sleep(1)
        if boot:
            print("连接成功")
            break
        else:
            print("error 连接失败 服务器未启动!!")

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

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

t1.join()
t2.join()

三、代码二

# 使用事件实现
#注意:event线程通讯仅仅用于简单的条件判断
#set()将状态修改为true
#wait()将状态修改为ture才继续执行下一步
import time
from threading import Thread,Event
event =Event()

def server_task():
    print("正在启动....")
    time.sleep(5)
    print("启动....成功")
    event.set()

def client_task():
    event.wait() #一个阻塞的函数  会阻塞直到对event执行set函数为止
    print("连接成功!")

t1 = Thread(target=server_task)
t1.start()
t2 = Thread(target=client_task)
t2.start()

 

posted @ 2019-08-18 22:17  Maple_feng  阅读(923)  评论(0编辑  收藏  举报