- sys_bus 组件用于消息的订阅和发布。在多线程中可用于,多个线程多个消息的解耦处理,通过定义不同的类型的 topic 用于处理不同的事务,任何线程可以随时通过 publish 来处理该消息。
该组件能够一对多或者多对多通信,即一个topic同时多个订阅者,发布到该topic的消息,所有订阅者均能处理。
该示例线程通过订阅 topic,A、B 线程分别向其订阅topic发送订阅消息处理。
# 该示例线程通过订阅 topic,A、B 线程分别向其订阅topic发送订阅消息处理。
import _thread
import utime
import sys_bus
def callback_A(topic, msg):
print("topic = {} msg = {}".format(topic, msg))
def callback_B(topic, msg):
print("topic = {} msg = {}".format(topic, msg))
# 线程 B 函数入口,订阅 sysbus/thread_B topic并定时3秒发送消息到sysbus/thread_A topic。
def thread_entry_B(id):
sys_bus.subscribe("sysbus/thread_B", callback_B)
while True:
sys_bus.publish_sync("sysbus/thread_A", "this is thread B msg")
utime.sleep(3)
# 线程 A 函数入口,订阅 sysbus/thread_A topic并定时3秒发送消息到sysbus/thread_B topic。
def thread_entry_A(id):
sys_bus.subscribe("sysbus/thread_A", callback_A)
while True:
sys_bus.publish_sync("sysbus/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',))
- 该示例线程 A、B 通过订阅同一 topic,实现一对多进行通信,其他线程发布消息到该topic,A、B线程均收到内容
# 该示例线程 A、B 通过订阅同一 topic,实现一对多进行通信,其他线程发布消息到该topic,A、B线程均收到内容。
import _thread
import utime
import sys_bus
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 函数入口,订阅 sysbus/multithread topic。
def thread_entry_B(id):
sys_bus.subscribe("sysbus/multithread", callback_B)
while True:
utime.sleep(10)
# 线程 A 函数入口,订阅 sysbus/multithread topic。
def thread_entry_A(id):
sys_bus.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秒发布消息到 sysbus/multithread topic。
while True:
sys_bus.publish_sync("sysbus/multithread", "sysbus broadcast conntent!")
utime.sleep(3)