zoukankan      html  css  js  c++  java
  • Event的使用

    from threading import Thread, Event
    import time
    event = Event()
    def student(name):
    print('学生%s在上课'%name)
    event.wait(2)
    print('学生%s在课件活动'%name)

    def teacher(name):
    print('老师%s在上课'%name)
    time.sleep(7)
    event.set()
    if __name__ == '__main__':
    stu1 = Thread(target=student, args=('alex', ))
    stu2 = Thread(target=student, args=('wuxxx', ))
    stu3 = Thread(target=student, args=('yuanhah', ))
    t = Thread(target=teacher, args=('egon', ))

    stu1.start()
    stu2.start()
    stu3.start()
    t.start()

    from threading import Thread, Event, currentThread
    import time
    event = Event()

    def conn():
    n = 0
    while not event.is_set():
    if n == 3:
    print('等的太久啦!重新试试吧!')
    return
    print('%s 在等待连接'%currentThread().getName())
    event.wait(0.5)
    n += 1
    print('%s 连接成功'%currentThread().getName())


    def check():
    print('%s正在自检服务器'%currentThread().getName())
    time.sleep(0.5)
    event.set()
    if __name__ == '__main__':
    for i in range(3):
    t = Thread(target=conn)
    t.start()
    t = Thread(target=check)
    t.start()

    '''二 Event

    线程的一个关键特性是每个线程都是独立运行且状态不可预测。如果程序中的其 他线程需要通过判断某个线程的状态来确定自己下一步的操作,这时线程同步问题就会变得非常棘手。为了解决这些问题,我们需要使用threading库中的Event对象。 对象包含一个可由线程设置的信号标志,它允许线程等待某些事件的发生。在 初始情况下,Event对象中的信号标志被设置为假。如果有线程等待一个Event对象, 而这个Event对象的标志为假,那么这个线程将会被一直阻塞直至该标志为真。一个线程如果将一个Event对象的信号标志设置为真,它将唤醒所有等待这个Event对象的线程。如果一个线程等待一个已经被设置为真的Event对象,那么它将忽略这个事件, 继续执行

    from threading import Event

    event.isSet():返回event的状态值;

    event.wait():如果 event.isSet()==False将阻塞线程;

    event.set(): 设置event的状态值为True,所有阻塞池的线程激活进入就绪状态, 等待操作系统调度;

    event.clear():恢复event的状态值为False。

    '''


    例如,有多个工作线程尝试链接MySQL,
    我们想要在链接前确保MySQL服务正常才让那些工作线程去连接MySQL服务器,
    如果连接不成功,都会去尝试重新连接。那么我们就可以采用threading.Event机制来协调各个工作线程的连接操作

    
    
  • 相关阅读:
    JVM启动参数小结
    Java 线程池学习
    myeclipse 8.5安装freemarker插件方法
    开源文件比较工具:WinMerge、KDiff3、diffuse
    初探淘宝技术构架
    Java获取IP地址:request.getRemoteAddr()注意
    Spring MVC 教程,快速入门,深入分析
    分布式服务框架 Zookeeper -- 管理分布式环境中的数据
    YARN作业提交流程剖析
    经典的MapReduce1解析
  • 原文地址:https://www.cnblogs.com/yuexijun/p/11614229.html
Copyright © 2011-2022 走看看