pythonl练习笔记——threading线程中的事件Event

1 事件Event

使用方法:e = threading.Event()

Event对象主要用于线程间通信,确切地说是用于主线程控制其他线程的执行。

Event事件提供了三个方法:wait等待、clear清除信号False、set设置信号True。

Event事件实现通信机制:全局定义了一个“Flag”(默认为False),若Flag信号被clear为False,则执行event.wait方法时会阻塞;若Flag信号被set为True,则执行event.wait方法时便不阻塞。

Event事件对象提供了is_set()方法判断内部信号Flag标志状态。

2 示例

import threading
import random
from time import sleep

a = 500

e = threading.Event()

def fun():
    while True:
        sleep(2)
        e.wait()
        global a
        print(‘a=‘,a)
        a -= random.randint(0,100)

t=threading.Thread(target=fun)
t.start()
while True:
    sleep(1)
    a += random.randint(0,10)
    if a>100:
        e.set()
    else:
        e.clear()

t.join()

运行

a= 503
a= 463
a= 457
a= 426...

说明:

(1)Event的默认标志为False,意味阻塞;

(2)Event置于线程对象中,可实现线程间通信,意味着一个线程的运行与否,与另外一个线程的通知信息有关。

(3)当一个线程因事件方法wait()而进入等待状态时,另外一个线程Flag为False时,则该线程会一直处于阻塞状态;直到另外一个进程通过set()方法将Flag标志设置为True时,Event事件会通知该线程恢复运行。

关于线程Event事件的深层次理解,可参考:Python学习总结笔记(5)--进程/线程Event机制使用时要注意的一个问题

原文地址:https://www.cnblogs.com/gengyi/p/8859100.html

时间: 2024-08-06 00:27:41

pythonl练习笔记——threading线程中的事件Event的相关文章

线程queue、事件event及协程

线程queue.事件event及协程 线程queue 多线程抢占资源,让其保持串行的两种方式: ? 1.互斥锁 ? 2.队列 线程队列分为以下三种: 1.Queue(先进先出) import queue q = queue.Queue(3) q.put(1) q.put(2) q.put(3) # q.put(4,block=False) # 若不设置block参数,默认为True,大于队列长度进入阻塞状态,若设置block为False,大于对列长度直接报错 print(q.get()) pri

【学习笔记】jquery中的事件和动画

---恢复内容开始--- jquery中的事件 jquery用$(document).ready()方法来代替传统JavaScript的window.onload方法. window.onload方法在网页中所有的元素(包括元素的所有关联文件)完全加载到浏览器后执行,通过 $(document).ready()方法注册的事件处理程序的DOM完全就绪时就可以被调用.此时,网页中的所有元素对jquery都是可以访问的. load()方法会在元素的onload事件中绑定一个处理函数,若绑定给windo

pythonl练习笔记——python线程的GIL

python线程中的全局解释器锁GIL(Global Interpreter Lock) python-->支持多线程-->同步和互斥-->加锁-->解释器加锁-->解释器同一时刻只能解释一个线程 在Cpython解释器中,同一个进程下开启的多线程,同一时刻只能有一个线程执行,无法利用多核优势 GIL并不是python的特性,它是实现python解释器(CPython)时引入的一个概念,Python完全不依赖于GIL. 解决方法 :* 使用 多进程代替多线程* 使用其他解释器

javascript中的事件Event

一.事件流 1.事件流:描述的是从页面中接受事件的顺序 IE的事件流是事件冒泡流,Netscape的事件流是事件捕获流. 2.事件冒泡 IE的事件流叫做事件冒泡(event bubbing),即事件开始时由具体的元素接受,然后逐级向上传播到较为不具体的节点.如果点击div.则事件流如下 div --> body --> html --> body 事件冒泡的过程如图 3.事件捕获 Netscape提出的事件流是事件捕获(event capturing),即不太具体的节点更早的接受到事件,

jQuery学习笔记(9)--jquery中的事件--$(document).ready()

1.$(document).ready()方法是事件模块中最重要的一个函数,可以极大地提高web应用程序的相应速度. 2.执行时机:DOM就绪后就会执行,而javascript中window.onload方法是在网页中的所有元素(包括元素的所有关联文件)完全加载到浏览器后才执行. 3.可多次使用. 4.有简写的形式:$(function){} window.onload与$(document).ready()的比较: 1 <script src="Scripts/jquery-1.4.1.

python线程的同步事件Event

Event对象: 用于线程间的通信,某个线程需要根据其他线程的状态来判断自己的下一步操作. Event内部定义了一个全局变量:_flag,默认为False. 当_flag = False时,会阻塞当前线程的执行:_flag = True时,当前线程会继续执行. Event内部还定义了如下方法来操纵标志位: set() ——将_flag(标志位)设置为True: clear()——将_flag设置为False: is_set()——返回当前_flag的状态.等同于isSet(). wait()——

C#中的事件(event)处理机制

委托 语法 1 [访问修饰符] delegate 返回类型 委托名(); 委托的特点 类似于C++函数指针,但它是类型安全的:委托允许将方法作为参数进行传递:委托可用于定义回调方法:委托可以链接在一起:如,可以对一个事件调用多个方法. 委托在运行时确定调用哪种方法,且委托和方法必须具有相同的签名. 1 //定义委托 2 public delegate int Callback(int num1, int num2); 3 //定义方法类 4 class MathCalc{ 5 //加法方法 6

线程中的信号量和事件

# 线程中的信号量 # 和进程中的信号量概念一样,创建好信号量的深度后,同一时间只有n个线程可以访问被信号量保护的代码 # 同一时间只有4个线程可以访问被信号量保护的代码 # import time # from threading import Semaphore, Thread # # def func(sem, a, b): # sem.acquire() # time.sleep(1) # print(a + b) # sem.release() # # if __name__ == '

子线程中如何修改ui界面

1.Android进程 一个应用程序被启动时,系统默认创建执行一个叫做"main"的线程.这个线程也是你的应用与界面工具包(android.widget和android.view包中的组件)交互的地方.于是main线程也被称为界面线程. 这种单线程的模式会带来低性能,除非你能正确的优化你的程序. 打 个比方:用户触摸屏幕上的一个按钮时的点击事件即向线程中派发事件,比如每一个事件为一辆车.而每一条线程都好像是一条单行线的单车道.这条车道上的车量 都排成队行驶至收费口进行事件处理.当处理的