我是靠谱客的博主 淡定烤鸡,这篇文章主要介绍IOT python高级培训(四)问题解答,现在分享给大家,希望可以做个参考。

目录

问题

解答

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)信号量

复制代码
1
2
3
4
5
6
7
8
9
10
11
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)条件变量

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
""" 条件变量 互斥锁是最简单的线程同步机制,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)事件

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
""" 事件 """ 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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部