• python 线程之 threading(三)


    python 线程之 threading(一)http://www.cnblogs.com/someoneHan/p/6204640.html

    python 线程之 threading(二)http://www.cnblogs.com/someoneHan/p/6209240.html

    使用threading.Thread.is_alive()这个方法可以判断线程是否是存活状态。但是在现有的基础上不能够直到线程什么时候开始,什么时候结束,什么时候被打断。

    如果有一个或者多个线程需要在另外的一个线程到达一个确定的点之后才执行下面的操作。这个时候可以使用threading.Event对象。

    Event对象和条件标记类似,允许线程等待某个事件发生,如果事件没有被设置而线程在登载该事件发生,那么线程就会被阻塞,直到事件被设置为止。当线程设置了这个事件是,就会唤醒所有等待的线程。

     1 from threading import Thread, Event
     2 import time
     3 
     4 
     5 def countdown(n, start_evt):
     6     start_evt.wait()
     7     print('countdown start')
     8     while n > 1:
     9         print('T-minus', n)
    10         n -= 1
    11         time.sleep(3)
    12 
    13 def countUp(n, start_evt):
    14     start_evt.wait()
    15     print('countup start')
    16     while n < 100:
    17         print('T-minus', n)
    18         n += 1
    19         time.sleep(3)
    20 
    21 
    22 # Create the event object that will be used to signal starting
    23 start_evt = Event()
    24 
    25 print('launching countdown')
    26 t = Thread(target=countdown, args=(10, start_evt))
    27 t.start()
    28 t2 = Thread(target=countUp, args=(1, start_evt))
    29 t2.start()
    30 print('threads to started')
    31 start_evt.set()
    View Code

    代码的运行结果是:

    threads to started
    countdown start
    T-minus 10
    countup start

    threads to started在countdown start和countup start之前运行。因为countdown和countup两个线程设置了Event事件的等待状态,当事件没有被触发的时候他们是不会开始运行的。

    注意:

         Event最好只用于一次型事件。因为一旦完成了设置Event对象就会被丢弃,如果在继续使用可能会造成问题。如果要重复的通知某个事件可以使用Condition

         Event对象的关键特性是唤醒所用等待的线程,如果只希望唤醒一个等待的线程可以使用Semaphore或者Condition

  • 相关阅读:
    (第十二周)Bug修正报告
    (第十二周)团队项目19
    (第十二周)新功能WBS
    (第十二周)团队项目18
    (第十二周)团队项目17
    (第十二周)Debug阶段成员贡献分
    (第十一周)工作总结
    学习进度
    第九周
    第八周
  • 原文地址:https://www.cnblogs.com/someoneHan/p/6213100.html
Copyright © 2020-2023  润新知