概述
目录
问题
解答
1. (1)信号量:
(2)条件变量:
(3)事件:
2.如何使用
(1)信号量
(2)条件变量
(3)事件
问题
首先我们来解决一下一下问题
1.什么是信号量、条件变量、事件
2.如何使用信号量、条件变量、事件
解答
1. (1)信号量:
用于设置多线程同时可运行的线程数
(2)条件变量:
condition被称为条件变量,其中还包括lock的acquire和release以及wait和notify方法。简单 来 讲线程首先acquire一个条件变量,然后判断一些条件。如果条件不满足则wait;如果条 件满足,进行一些处理改变条件后,通过notify方法通知其他线程,其他处于wait状态 的线 程接到通知后会重新判断条件。不断的重复这一过程,从而解决复杂的同步问题。
(3)事件:
用于主线程控制其他线程的执行,事件是一个简单的线程同步对象,其主要提供以下 的几个方法:clear将flag设置为 False
set将flag设置为 True
is_set判断是否设置了flag
wait会一直监听flag,如果没有检测到flag就一直处于阻塞状态
事件处理的机制:全局定义了一个Flag,
当Flag的值为False,那么event.wait()就会阻塞,
当flag值为True,那么event.wait()便不再阻塞
2.如何使用
(1)信号量
def run(n,x):
semaphore.acquire()#信号获取
print(n)
time.sleep(x)
semaphore.release()
if __name__ == '__main__':
semaphore=threading.Semaphore()#信号量实体化
for i in range(5):
t=threading.Thread(target=run,args=(i,i))#多线程工作target指所用函数args指传递参数相当于run(i,i)
t.start()
(2)条件变量
"""
条件变量
互斥锁是最简单的线程同步机制,Python提供的Condition对象提供了对复杂线程同步问题的支持
"""
import threading
import time
def run(x):
con.acquire()#相当于开始了
print(f'线程{x}')
con.notify()#让等待的进程进行唤醒
print(f'线程{x}挂起')
con.wait()
con.notify()
time.sleep(1)
print(f'线程{x}在此启动')
con.release()
if __name__ == '__main__':
con = threading.Condition()#实例化
# for i in range(50):
# t=threading.Thread(target=run,args=(i,))
# t.start()
t1=threading.Thread(target=run,args=(1,))
t2 = threading.Thread(target=run, args=(1,))
t1.start()
t2.start()
(3)事件
"""
事件
"""
import threading
import time
def car():
while True:
if event.is_set():
print('小车行驶')
else:
print('没有行驶')
def set_event():
while True:
event.set()
time.sleep(1)
event.clear()
time.sleep(1)
if __name__ == '__main__':
event=threading.Event()
car1=threading.Thread(target=car)
car1.start()
set_e=threading.Thread(target=set_event)
set_e.start()
最后
以上就是淡定烤鸡为你收集整理的IOT python高级培训(四)问题解答的全部内容,希望文章能够帮你解决IOT python高级培训(四)问题解答所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复