大家好,今天来讲一下python里的threading.Event类的使用,这个类使用简单,功能强大,如果你的用法得当的话,对一些高级功能的实现会很有帮助,典型的使用场景就是代码解耦,再或者就是数据流从a到b端的持续处理,需要a端发送数据,b端接收到后处理,那么接下来我们直奔主题,来看一下怎么在python里使用事件吧。
threading.Event类的官方描述参考这里。
测试使用的代码:
from datetime import datetime
from threading import Thread, Event
import time
class ResultEvent(Event):
data = None
def __init__(self, data):
super().__init__()
self.data = data
def now_str():
return datetime.strftime(datetime.now(), "%Y-%m-%d %H:%M:%S")
# 事件的发送和接收,多线程演示
def multi_thread_event():
def send_event_loop(e: ResultEvent):
while True:
e.set()
e.clear()
print("[{}]send event,data:{}\n".format(now_str(), e.data))
time.sleep(5)
def receive_event_loop1(e: ResultEvent):
while True:
e.wait()
print("[{}]loop1 rec event,data:{}".format(now_str(), e.data))
def receive_event_loop2(e: ResultEvent):
while True:
e.wait()
print("[{}]loop2 rec event,data:{}".format(now_str(), e.data))
ok_event = ResultEvent("{'flag':'ok'}")
Thread(target=send_event_loop, args=(ok_event,)).start()
Thread(target=receive_event_loop1, args=(ok_event,)).start()
Thread(target=receive_event_loop2, args=(ok_event,)).start()
if __name__ == '__main__':
multi_thread_event()
输出结果示例:
[2023-12-14 17:38:56]send event,data:{'flag':'ok'}
[2023-12-14 17:38:56]loop1 rec event,data:{'flag':'ok'}
[2023-12-14 17:38:56]loop2 rec event,data:{'flag':'ok'}
[2023-12-14 17:39:01]send event,data:{'flag':'ok'}
[2023-12-14 17:39:01]loop2 rec event,data:{'flag':'ok'}
[2023-12-14 17:39:01]loop1 rec event,data:{'flag':'ok'}
如果觉得写的还可以或者对你有帮助,恳请各位看官动动手指点个赞或者收藏,后续有机会仍然会分享一些比较实用的API,那我们就下次再见~