Home > Article > Backend Development > Detailed explanation of the use of Event in Python multi-threading
This article mainly introduces the detailed explanation of the use of python multi-threaded events. Now I will share it with you and give you a reference. Come and have a look together
Preface
Friends a, b, and c gathered around to eat hot pot. When the dishes were served, it was a treat. The host said: Let’s eat! , so the friends move chopsticks together, how to realize this scenario
Event (event)
Event (event): event processing mechanism: a built-in event is globally defined Flag Flag, if the Flag value is False, then the program will block when executing the event.wait method. If the Flag value is True, then the event.wait method will no longer block.
Event is actually a simplified version of Condition. Event does not have a lock and cannot cause the thread to enter a synchronous blocking state.
Event()
set(): Set the flag to True and notify all threads in the waiting blocked state to resume running.
clear(): Set the flag to False.
wait(timeout): If the flag is True, it will return immediately, otherwise the thread will be blocked in the waiting blocking state and wait for other threads to call set().
isSet(): Gets the built-in flag status and returns True or False.
Event Case 1
Scenario: Friends a and b are ready, when they receive the notification event.set (), threads a and b will be executed
# coding:utf-8 import threading import time event = threading.Event() def chihuoguo(name): # 等待事件,进入等待阻塞状态 print '%s 已经启动' % threading.currentThread().getName() print '小伙伴 %s 已经进入就餐状态!'%name time.sleep(1) event.wait() # 收到事件后进入运行状态 print '%s 收到通知了.' % threading.currentThread().getName() print '小伙伴 %s 开始吃咯!'%name # 设置线程组 threads = [] # 创建新线程 thread1 = threading.Thread(target=chihuoguo, args=("a", )) thread2 = threading.Thread(target=chihuoguo, args=("b", )) # 添加到线程组 threads.append(thread1) threads.append(thread2) # 开启线程 for thread in threads: thread.start() time.sleep(0.1) # 发送事件通知 print '主线程通知小伙伴开吃咯!' event.set()
Running result:
Thread- 1 Already started
Friend a has entered the dining state!
Thread-2 has been started
Little friend b has entered the dining state!
The main thread notifies friends to start eating!
Thread-1 Received the notification.
Friend a, start eating!
Thread-2 I received the notification.
Little friend b starts eating!
Event Case 2
Scenario: After friends a, b, and c have gathered, the person who invited the guests said: Open Eat it!
# coding:utf-8 import threading import time event = threading.Event() def chiHuoGuo(name): # 等待事件,进入等待阻塞状态 print '%s 已经启动' % threading.currentThread().getName() print '小伙伴 %s 已经进入就餐状态!'%name time.sleep(1) event.wait() # 收到事件后进入运行状态 print '%s 收到通知了.' % threading.currentThread().getName() print '%s 小伙伴 %s 开始吃咯!'%(time.time(), name) class myThread (threading.Thread): # 继承父类threading.Thread def __init__(self, name): '''重写threading.Thread初始化内容''' threading.Thread.__init__(self) self.people = name def run(self): # 把要执行的代码写到run函数里面 线程在创建后会直接运行run函数 '''重写run方法''' chiHuoGuo(self.people) # 执行任务 print("qq交流群:226296743") print("结束线程: %s" % threading.currentThread().getName()) # 设置线程组 threads = [] # 创建新线程 thread1 = myThread("a") thread2 = myThread("b") thread3 = myThread("c") # 添加到线程组 threads.append(thread1) threads.append(thread2) threads.append(thread3) # 开启线程 for thread in threads: thread.start() time.sleep(0.1) # 发送事件通知 print '集合完毕,人员到齐了,开吃咯!' event.set()
Run result:
Thread-1 has been started
Partner a has entered Dining status!
Thread-2 has been started
Little friend b has entered the dining state!
Thread-3 has been started
Little friend c has entered the dining state!
The gathering is complete, everyone is here, let’s eat!
Thread-1 Received the notification.
1516780957.47 Friend a, start eating!
qq communication group: 226296743
Ended thread: Thread-1
Thread-3 Received the notification.
1516780957.47 Little friend c starts eating! Thread-2 has received the notification.
qq communication group: 2262967431516780957.47 Friend b, start eating! End thread: Thread-3
qq exchange group: 226296743
End thread: Thread-2
Related recommendations:
Implementation of python thread pool threadpool
The above is the detailed content of Detailed explanation of the use of Event in Python multi-threading. For more information, please follow other related articles on the PHP Chinese website!