• 物联网开发笔记(52)- 使用Micropython开发ESP32开发板之多线程


    一、目的

            这一节我们学习如何使用我们的ESP32开发板来进行多线程的学习。

    二、环境

            ESP32 + Thonny IDE

    三、单任务

            我们先来看看单任务单线程,从上到下依次执行,先是每隔1秒打印1个1,然后是每隔1秒打印1个2

    1. import time
    2. for i in range(3):
    3. print("1")
    4. time.sleep(1)
    5. for i in range(3):
    6. print("2")
    7. time.sleep(1)

    输出为

     四、多任务

            我们再来看看多任务,多任务感觉上去程序可以同时执行多个不同的代码,例如多个while循环同时执行。

    1. import _thread
    2. import time
    3. import sys
    4. import machine
    5. def test1(*args, **kwargs):
    6. for i in range(3):
    7. print("1")
    8. time.sleep(1)
    9. def test2(*args, **kwargs):
    10. for i in range(3):
    11. print("2")
    12. time.sleep(1)
    13. # 此处创建2个线程
    14. thread_1 = _thread.start_new_thread(test1, (1,))
    15. thread_2 = _thread.start_new_thread(test2, (2,))

    说明:_thread.start_new_thread

    • 第1个参数,函数的引用,理解为线程要到哪里执行代码
    • 第2个参数,元组,要给线程执行函数的实参,必须是元组
    • 第3个参数(可有可无),命名参数,给线程执行函数的实参。如:1=9。

    输出为:

     五、MicroPython中的多线程

            我们可以使用_thread来在ESP32中开发多进程的代码。如下:

    1. import _thread
    2. import time
    3. import sys
    4. import machine
    5. # ---------- 这是一个线程要执行的代码 ------------
    6. def test1(*args, **kwargs):
    7. while True:
    8. print("1")
    9. time.sleep(1)
    10. # ---------- 这是另一个线程要执行的代码 ------------
    11. def test2(*args, **kwargs):
    12. while True:
    13. print("2")
    14. time.sleep(1)
    15. # ---------- 这里创建线程 ------------
    16. thread_1 = _thread.start_new_thread(test1, (1,))
    17. thread_2 = _thread.start_new_thread(test2, (2,))
    18. # ---------- 这是主线程要执行的代码 ------------
    19. while True:
    20. print("3")
    21. time.sleep(1)

    运行结果:

     

    六、建议

            在ESP开发板中,如果不是必须不建议使用多线程,因为我们的开关板存储和执行性能有限,多线程会带来大的开销,所以开发过程中我们要合理的安排。

  • 相关阅读:
    MySQL高级SQL语句
    520最深情的表白信(代码实现)
    【设计模式】聊聊模板模式
    成都瀚网科技有限公司:抖音橱窗,改变居民生活的亮眼新势力
    ES6及其后续版本的新特性的理解
    Java中JVM的xmx和xms配置成一样的好处
    【小嘟陪你刷题01】LeetCode 448 && 238 && 728 && 724 && 349 && 747 && 面试题05.06 && 645
    读写 XML/JSON/INI 和 UBJSON 等格式的数据文件的统一接口
    webstorm/idea配置leetcode刷题
    flutter实现透明appbar(一)
  • 原文地址:https://blog.csdn.net/zhusongziye/article/details/128063353