zoukankan      html  css  js  c++  java
  • 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("33[31;1mred light ............33[0m")
                #清除标志,代表红灯停
            elif count>10:
                event.set()
                print("33[32;1mgreen light..........33[0m")
                #设置标志,代表绿灯行
                count=0
            else:
                print("33[32;1mgreen light..........33[0m")
            time.sleep(1)
            count+=1
    
    def car():#汽车
        while True:
    
            if event.is_set():#判读标志是否设置
                print("33[33;1mcar runing .......33[0m")
                time.sleep(1)
            else:
    
                event.wait() #等待标志设置
    
    
    l=threading.Thread(target=lighter,)
    c=threading.Thread(target=car,)
    l.start()
    c.start()
    

      

  • 相关阅读:
    python的ORM框架SQLAlchemy
    SQLAlchemy技术文档(中文版)-下
    SQLAlchemy技术文档(中文版)-上
    python的class的__str__和__repr__(转)
    虚拟化技术之KVM
    cobbler部署安装
    pxe+kickstart 无人值守安装CentOS7.1
    超详细saltstack安装部署及应用
    页面缓存
    db2 常用命令
  • 原文地址:https://www.cnblogs.com/lixiang1013/p/7076206.html
Copyright © 2011-2022 走看看