嵌入式人工智能ESP32(6-多线程)

嵌入式人工智能(29-基于树莓派4B的按键中断--多线程实现)_树莓派使用按钮控制程序终止进行-CSDN博客

嵌入式人工智能ESP32(3-定时器与外部中断)-CSDN博客

 1、多线程

多线程我们已经做过一次实验了,通过按键中断呼吸灯的运行。如果不用多线程,那么在实验中发现按键不灵敏,有时按下并不能中断呼吸灯的运行。为什么?因为按键按下触发的低电平判断只是一瞬间,而这一瞬间CPU在呼吸灯的time.sleep里面,没有腾出时间去判断,而等到CPU有时间判断了,发现按键已经抬起了。说着说着,突然有种伤感,人生总是由于错过而充满遗憾,令人嗟嘘。

但有了多线程就不一样了,它并不是等一个线程执行完了,再去执行另一个线程,而是采用并发执行的操作,同时执行2个线程,就是说同时做2个事情。在呼吸灯sleep里,CPU在另一个线程里面一直等待按键的按下,只要按键按下,立刻中断呼吸灯的线程。这个很像中断,在ESP32里面,我们也通过中断实现按键中断LED灯闪烁的效果,中断是硬件,也是解决问题的一种方式。

在micropython的官方文档里面显示出该多线程模块是高度实验的,没有相关案例参考。我们自己写点意思下。

import _thread
import time

def test1(*args, **kwargs):
    for i in range(10):
        print("任务1...%d" % i)
        time.sleep(0.1)

def test2(*args, **kwargs):
    for i in range(5):
        print("任务2...%d" % i)
        time.sleep(0.2)
        
t1 = _thread.start_new_thread(test1,(1,))
t2 = _thread.start_new_thread(test2,(2,))

(1)可以看出和标准的Python库还有有一些不一样的,它导入的库名为_thread。

(2)多线程的执行是随机的,但CPU执行分配同样的时间片,那么耗时短的程序会先执行完。

 如果是一直循环执行,那么每个线程CPU分配的时间是一样的,这样占用CPU时间少,但又比较重要的事情就会频繁的去做,可以达到软实时监控的要求,但相比较硬件中断还是要实时性差点。(线程不是一个计算机硬件的功能,而是操作系统提供的一种逻辑功能,线程本质上是进程中一段并发运行的代码,所以线程需要操作系统投入CPU资源来运行和调度。 )

(3)补充 python中*args和**kwargs的解释,这个具体用法不在本文赘述。

*args和**kwargs:属于可变参数
*args会将传入的参数放入名为args的元组中
**kwargs会将传入的关键字参数放入名为kwargs的字典中

如果函数没有参数可以这样写。如果有参数的情况可以参考:

import _thread
import time

def test1(num):
    for i in range(num):
        print("任务1...%d" % i)
        time.sleep(0.1)


def test2(num):
    for i in range(num):
        print("任务2...%d" % i)
        time.sleep(0.2)
        
t1 = _thread.start_new_thread(test1,(3,))
t2 = _thread.start_new_thread(test2,(6,))
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值