概念

  • EventMesh 组件用于消息的订阅和发布。在多线程中可用于,多个线程多个消息的解耦处理,通过定义不同的类型的 topic 用于处理不同的事务,任何线程可以随时通过 publish 来处理该消息。
  • 该组件只能一对一或者多对一通信,即一个topic同时只能一个订阅者,最后一个订阅的会挤掉其他订阅者
  • 自己导入下载
  • EventMesh

例子1

  • 该示例线程通过订阅 topic,A、B 线程分别向其订阅 topic 发送订阅消息处理
  1. # 该示例线程通过订阅 topic,A、B 线程分别向其订阅 topic 发送订阅消息处理。
  2. import _thread
  3. import utime
  4. from usr import EventMesh
  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 函数入口,订阅 EventMesh/thread_B topic并定时3秒发送消息到EventMesh/thread_A topic。
  10. def thread_entry_B(id):
  11. EventMesh.subscribe("EventMesh/thread_B", callback_B)
  12. while True:
  13. EventMesh.publish_sync("EventMesh/thread_A", "this is thread B msg")
  14. utime.sleep(3)
  15. # 线程 A 函数入口,订阅 EventMesh/thread_A topic并定时3秒发送消息到EventMesh/thread_B topic。
  16. def thread_entry_A(id):
  17. EventMesh.subscribe("EventMesh/thread_A", callback_A)
  18. while True:
  19. EventMesh.publish_sync("EventMesh/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',))

例子2

  1. # 该示例线程 A、B 通过订阅同一 topic,EventMesh 一个 topic 只能一个订阅,B 最后订阅,会直接挤掉 A 的订阅,只有 B 线程能收到该 topic 消息。
  2. import _thread
  3. import utime
  4. from usr import EventMesh
  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 函数入口,订阅 EventMesh/multithread topic。
  10. def thread_entry_B(id):
  11. EventMesh.subscribe("EventMesh/multithread", callback_B)
  12. while True:
  13. utime.sleep(10)
  14. # 线程 A 函数入口,订阅 EventMesh/multithread topic。
  15. def thread_entry_A(id):
  16. EventMesh.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秒发布消息到 EventMesh/multithread topic。
  23. while True:
  24. EventMesh.publish_sync("EventMesh/multithread", "EventMesh broadcast conntent!")
  25. utime.sleep(3)