python的协程和多线程,python 线程 协程
文章目录事件同步对象信号量信号量队列
这篇文章是关于Python进程的,主要是事件同步对象,信号量和队列。
事件对象1。概念:
我们可以为线程设置一个等待值。在等待期间,其他线程不能继续执行,直到这个值被清除,其他线程才能继续执行。
比如考试,监考老师进教室,一群学生开始考试;
然后只有老师说停笔,你才能走出考场;
即使你写完了论文,你也要等老师通知后才能离开。
2.测试代码:
导入线程,时间
#教师类别
班主任(穿线。线程):
定义运行(自身):
打印(老师:开始考试吧,今天12点半了!)
Print(event.isSet()) #检查是否有设定值
#开始设置值
event.set()
Time.sleep(5) #将标准测试时间设置为5秒
#教师的行动
打印(老师:12点半了,考试结束了!)
#老师的动作结束了,再检查一下值是设置的还是假的。
Print(event.isSet()) #再次检查该值是否已设置
event.set()
#学生班级
班级学生(线程。线程):
定义运行(自身):
event.wait()
打印(学生:唉,考试开始了……)
Time.sleep(1) #假设学生考试只花1秒钟。
Event.clear() # clear
event.wait()
打印(学生:终于考完了……)
if __name__==__main__ :
#实例化一个事件对象
事件=线程。事件()
L=[]
对于范围(5)中的I:
L.append(Student())
L.append(Teacher())
#开始线程
对于L中的t:
启动()
对于L中的t:
T.join()3。测试结果:
你可以看到,几个学生同时在考试,这群学生只有在老师完成这个任务后才能结束。
西蒙信号1。参考概念:
信号量用于控制可以同时打开的线程数量。BoundedSemaphore或Semaphore管理一个内置计数器,每当调用acquire()时,该计数器为-1,当调用release()时,该计数器为1。
计数器不能小于0。当计数器为0时,acquire()会将线程阻塞到同步锁定状态,直到其他线程调用release()。(类似于停车位的概念)
BoundedSemaphore和Semaphore唯一的区别是,前者在调用release()时会检查计数器的值是否超过了计数器的初始值,如果超过了就会抛出异常。
2.测试代码:
导入线程,时间
#继承线程的类
类MyThread(线程。线程):
定义运行(自身):
if semaphore.acquire():
Print(self.name) #输出线程名
Time.sleep(5) #睡眠5秒,每个线程都会停留5秒
#释放信号量
信号量. release()
if __name__==__main__ :
# Set semaphore,5表示一次可以执行5个线程。
信号量=线程。信号量(5)
L=[]
对于范围内的I(100):
L.append(MyThread())
对于L中的t:#启动线程
T.start()3。测试结果:
你可以看到,每五个线程出来。
1.先进先出型:
导入队列#导入线程队列
L=[]
#创建线程队列对象
q=队列。队列(5)
#可以容纳5个对象的队列(如果没有指定,可以是任意大小)。block=False表示队列已满,并将提示一条错误消息。
#在线程队列中放一个值
q.put([1,233333])
q.put([2,小女孩])
Q.put([3,{name :初音 }])
#q.put({name2 :初音未来2})
#重视价值
虽然正确:
data=q.get(block=True)
#block=False表示如果卡住,会提示错误,
#因为线程队列没有数据要取,所以会提示队列为空的消息。
打印(数据,-)
2.先进后出:
导入队列
#后进先出队列
q=队列。LifoQueue()
#在线程队列中放一个值
q.put([1,233333])
q.put([2,小女孩])
Q.put([3,{name :初音 }])
#重视价值
虽然正确:
data=q.get(block=False)
#block=False表示如果卡住,会提示错误,
#因为线程队列没有数据要取,所以会提示队列为空的消息。
打印(数据,-)
其他排队方法
导入队列
#创建队列
q=队列。队列()
#在线程队列中放一个值
q.put([1,233333])
q.put([2,小女孩])
Q.put([3,{name :初音 }])
#重视价值
Print(q.qsize()) #队列值的数量
print(q.empty()) #是空的吗?
print(q.full()) #满了吗?
q.task_done()
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。