• sys_bus 组件用于消息的订阅和发布。在多线程中可用于,多个线程多个消息的解耦处理,通过定义不同的类型的 topic 用于处理不同的事务,任何线程可以随时通过 publish 来处理该消息。
    • 该组件能够一对多或者多对多通信,即一个topic同时多个订阅者,发布到该topic的消息,所有订阅者均能处理。

    • 该示例线程通过订阅 topic,A、B 线程分别向其订阅topic发送订阅消息处理。

    1. # 该示例线程通过订阅 topic,A、B 线程分别向其订阅topic发送订阅消息处理。
    2. import _thread
    3. import utime
    4. import sys_bus
    5. def callback_A(topic, msg):
    6. print("topic = {} msg = {}".format(topic, msg))
    7. def callback_B(topic, msg):
    8. print("topic = {} msg = {}".format(topic, msg))
    9. # 线程 B 函数入口,订阅 sysbus/thread_B topic并定时3秒发送消息到sysbus/thread_A topic。
    10. def thread_entry_B(id):
    11. sys_bus.subscribe("sysbus/thread_B", callback_B)
    12. while True:
    13. sys_bus.publish_sync("sysbus/thread_A", "this is thread B msg")
    14. utime.sleep(3)
    15. # 线程 A 函数入口,订阅 sysbus/thread_A topic并定时3秒发送消息到sysbus/thread_B topic。
    16. def thread_entry_A(id):
    17. sys_bus.subscribe("sysbus/thread_A", callback_A)
    18. while True:
    19. sys_bus.publish_sync("sysbus/thread_B", "this is thread A msg")
    20. utime.sleep(3)
    21. # 创建线程A、B。
    22. _thread.start_new_thread(thread_entry_A, ('A',))
    23. _thread.start_new_thread(thread_entry_B, ('B',))
    • 该示例线程 A、B 通过订阅同一 topic,实现一对多进行通信,其他线程发布消息到该topic,A、B线程均收到内容
    1. # 该示例线程 A、B 通过订阅同一 topic,实现一对多进行通信,其他线程发布消息到该topic,A、B线程均收到内容。
    2. import _thread
    3. import utime
    4. import sys_bus
    5. def callback_A(topic, msg):
    6. print("callback_A topic = {} msg = {}".format(topic, msg))
    7. def callback_B(topic, msg):
    8. print("callback_B topic = {} msg = {}".format(topic, msg))
    9. # 线程 B 函数入口,订阅 sysbus/multithread topic。
    10. def thread_entry_B(id):
    11. sys_bus.subscribe("sysbus/multithread", callback_B)
    12. while True:
    13. utime.sleep(10)
    14. # 线程 A 函数入口,订阅 sysbus/multithread topic。
    15. def thread_entry_A(id):
    16. sys_bus.subscribe("sysbus/multithread", callback_A)
    17. while True:
    18. utime.sleep(10)
    19. # 创建线程A、B。
    20. _thread.start_new_thread(thread_entry_A, ('A',))
    21. _thread.start_new_thread(thread_entry_B, ('B',))
    22. # 主线程间隔3秒发布消息到 sysbus/multithread topic。
    23. while True:
    24. sys_bus.publish_sync("sysbus/multithread", "sysbus broadcast conntent!")
    25. utime.sleep(3)