zoukankan      html  css  js  c++  java
  • Python线程event

    python线程的事件用于主线程控制其他线程的执行,事件主要提供了三个方法wait、clear、set

    事件处理的机制:全局定义了一个“Flag”,如果“Flag”值为 False,那么当程序执行 event.wait 方法时就会阻塞,如果“Flag”值为True,那么event.wait 方法时便不再阻塞。

    • clear:将“Flag”设置为False
    • set:将“Flag”设置为True

    用 threading.Event 实现线程间通信
    使用threading.Event可以使一个线程等待其他线程的通知,我们把这个Event传递到线程对象中,
    Event默认内置了一个标志,初始值为False。
    一旦该线程通过wait()方法进入等待状态,直到另一个线程调用该Event的set()方法将内置标志设置为True时,
    该Event会通知所有等待状态的线程恢复运行。

    import threading 
    import time  
       
    class MyThread(threading.Thread):  
        def __init__(self, signal):  
            threading.Thread.__init__(self) 
            # 初始化 
            self.singal = signal  
               
        def run(self):  
            print "I am %s,I will sleep ..."%self.name  
            # 进入等待状态
            self.singal.wait()  
            print "I am %s, I awake..." %self.name  
               
    if __name__ == "__main__":
        # 初始 为 False 
        singal = threading.Event()  
        for t in range(0, 3):  
            thread = MyThread(singal)  
            thread.start()  
           
        print "main thread sleep 3 seconds... "  
        time.sleep(3)  
        # 唤醒含有signal, 处于等待状态的线程  
        singal.set()
    
    import threading
     
     
    def do(event):
        print 'start'
        event.wait()
        print 'execute'
     
     
    event_obj = threading.Event()
    for i in range(10):
        t = threading.Thread(target=do, args=(event_obj,))
        t.start()
     
    event_obj.clear() #继续阻塞
    inp = raw_input('input:')
    if inp == 'true':
        event_obj.set() #唤醒
    

      

      

  • 相关阅读:
    WordPress怎么禁用古滕堡编辑器(Gutenberg)
    .Net Framework 4.0安装cmd命令
    Windows服务器一键要打开多个软件或一键关闭多个软件
    Photosho 切换英文版教程
    解决宝塔面板无法停止Tomcat方法
    只要系统镜像就能制作可启动安装系统U盘
    [网摘]分享一段流量劫持JS代码
    Script http跳https
    linux系统 标准目录及其内容
    centos7 永久修改主机名
  • 原文地址:https://www.cnblogs.com/alan-babyblog/p/5338146.html
Copyright © 2011-2022 走看看