概念
- EventMesh 组件用于消息的订阅和发布。在多线程中可用于,多个线程多个消息的解耦处理,通过定义不同的类型的 topic 用于处理不同的事务,任何线程可以随时通过 publish 来处理该消息。
- 该组件只能一对一或者多对一通信,即一个topic同时只能一个订阅者,最后一个订阅的会挤掉其他订阅者
- 自己导入下载
- EventMesh
例子1
- 该示例线程通过订阅 topic,A、B 线程分别向其订阅 topic 发送订阅消息处理
# 该示例线程通过订阅 topic,A、B 线程分别向其订阅 topic 发送订阅消息处理。
import _thread
import utime
from usr import EventMesh
def callback_A(topic, msg):
print("topic = {} msg = {}".format(topic, msg))
def callback_B(topic, msg):
print("topic = {} msg = {}".format(topic, msg))
# 线程 B 函数入口,订阅 EventMesh/thread_B topic并定时3秒发送消息到EventMesh/thread_A topic。
def thread_entry_B(id):
EventMesh.subscribe("EventMesh/thread_B", callback_B)
while True:
EventMesh.publish_sync("EventMesh/thread_A", "this is thread B msg")
utime.sleep(3)
# 线程 A 函数入口,订阅 EventMesh/thread_A topic并定时3秒发送消息到EventMesh/thread_B topic。
def thread_entry_A(id):
EventMesh.subscribe("EventMesh/thread_A", callback_A)
while True:
EventMesh.publish_sync("EventMesh/thread_B", "this is thread A msg")
utime.sleep(3)
# 创建线程A、B。
_thread.start_new_thread(thread_entry_A, ('A',))
_thread.start_new_thread(thread_entry_B, ('B',))
例子2
# 该示例线程 A、B 通过订阅同一 topic,EventMesh 一个 topic 只能一个订阅,B 最后订阅,会直接挤掉 A 的订阅,只有 B 线程能收到该 topic 消息。
import _thread
import utime
from usr import EventMesh
def callback_A(topic, msg):
print("callback_A topic = {} msg = {}".format(topic, msg))
def callback_B(topic, msg):
print("callback_B topic = {} msg = {}".format(topic, msg))
# 线程 B 函数入口,订阅 EventMesh/multithread topic。
def thread_entry_B(id):
EventMesh.subscribe("EventMesh/multithread", callback_B)
while True:
utime.sleep(10)
# 线程 A 函数入口,订阅 EventMesh/multithread topic。
def thread_entry_A(id):
EventMesh.subscribe("sysbus/multithread", callback_A)
while True:
utime.sleep(10)
# 创建线程A、B。
_thread.start_new_thread(thread_entry_A, ('A',))
_thread.start_new_thread(thread_entry_B, ('B',))
# 主线程间隔3秒发布消息到 EventMesh/multithread topic。
while True:
EventMesh.publish_sync("EventMesh/multithread", "EventMesh broadcast conntent!")
utime.sleep(3)