zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    设计模式之策略模式、观察者模式浅析
    axis2_1.6.2之构建web端和客户端
    EJB3之查询
    qpid之简单实例
    ant1.9.4之编译、打包、发布、清理
    四数之和
    电话号码的字母的组合
    最接近的三数之和
    三数之和
    最长公共前缀
  • 原文地址:https://www.cnblogs.com/angelyan/p/11374232.html
Copyright © 2011-2022 走看看