python网络编程--线程event

 一:线程event作用

  Python提供了Event对象用于线程间通信,它是线程设置的信号标志,如果信号标志位真,则其他线程等待直到信号结束。

  Event对象实现了简单的线程通信机制,它提供了设置信号,清楚信号,等待等用于实现线程间的通信。

  官方解释

  event是一个简单的同步对象;event表示内部标志和线程。可以等待标志设置,或设置或清除标志本身。

二:event使用

  1)event = threading.Event() 申明event实例 
  2)event.wait()   线程设置等待标志
  3)event.set()    如果设置了标志,则等待方法不执行任何操作
  4)event.clear() 如果标志已清除,等待将阻塞,直到它再次设置。

  任意数量的线程都可能等待相同的事件。

 

三:示例代码

  通过Event来实现两个或多个线程间的交互,下面是一个红绿灯的例子,即起动一个线程做交通指挥灯,生成几个线程做车辆,车辆行驶按红灯停,绿灯行的规则。

  

# -*- coding:utf-8 -*-
__author__ = 'shisanjun'

import threading
import time
event=threading.Event()#申明event对象

def lighter():#红绿灯
    event.set()#设置标志,代表绿灯行

    count=0

    while True: #1-5绿灯,6-10红灯

        if count>5 and count<=10:
            event.clear()
            print("\033[31;1mred light ............\033[0m")
            #清除标志,代表红灯停
        elif count>10:
            event.set()
            print("\033[32;1mgreen light..........\033[0m")
            #设置标志,代表绿灯行
            count=0
        else:
            print("\033[32;1mgreen light..........\033[0m")
        time.sleep(1)
        count+=1

def car():#汽车
    while True:

        if event.is_set():#判读标志是否设置
            print("\033[33;1mcar runing .......\033[0m")
            time.sleep(1)
        else:

            event.wait() #等待标志设置


l=threading.Thread(target=lighter,)
c=threading.Thread(target=car,)
l.start()
c.start()

  

posted on 2017-06-25 10:10  shisanjun  阅读(229)  评论(0编辑  收藏  举报

导航