让虚谷号定时执行任务
2021-06-24谢作如
中国信息技术教育 2021年11期
谢作如



在去年的疫情期间,我用虚谷号做了一个能够定时打铃、广播的创客作品——定时铃声广播系统,让家里的作息时间和学校保持一致。想不到这个简单的作品吸引了很多朋友的目光,常常有人来询问作品的编程细节问题。
从功能上分析,我们常见的创客作品大都属于“动作触发”类型,借助传感器感知外界的信息,然后根据输入的信息来执行相应的动作。而定时铃声广播系统则是根据系统内部的时间进行触发,属于“时间触发”类型。这种作品的编程重点在于如何定时执行一个个任务,即实现定时任务或者任务调度功能。
● “定时任务”的技术分析
我们知道,现在的计算机操作系统都支持“多任务”(Multitasking)。虽然计算机的中央处理器(CPU)在同一时刻只能运行一个程序(双核心则支持两个),但是由于CPU的速度极快,每秒能执行几十亿条机器语言指令,因此系统可以划分出微秒级的时间片,通过合理的任务调度快速切换执行程序,从人类的角度看就是在同时运行了。
虚谷号上运行的是Linux系统,有很多方法实现任务调度。说起用Python代码实现定时执行任务,大家肯定会想到用“sleep”,代码如图1所示。
在循环中加“sleep”的做法显然不够好,最大的缺點是只能执行固定间隔时间的任务,不支持定时任务,如早上六点半播放起床铃声。另外,“sleep”是一个阻塞函数,也就是说在“sleep”这一段时间,计算机什么都不能做。因而,要实现很多任务的调度,一般会使用Python标准库中的sched模块,参考代码如图2所示。……
登录APP查看全文
