让虚谷号定时执行任务

来源 :中国信息技术教育 | 被引量 : 0次 | 上传用户:wk4605300051
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  在去年的疫情期间,我用虚谷号做了一个能够定时打铃、广播的创客作品——定时铃声广播系统,让家里的作息时间和学校保持一致。想不到这个简单的作品吸引了很多朋友的目光,常常有人来询问作品的编程细节问题。
  从功能上分析,我们常见的创客作品大都属于“动作触发”类型,借助传感器感知外界的信息,然后根据输入的信息来执行相应的动作。而定时铃声广播系统则是根据系统内部的时间进行触发,属于“时间触发”类型。这种作品的编程重点在于如何定时执行一个个任务,即实现定时任务或者任务调度功能。
  ● “定时任务”的技术分析
  我们知道,现在的计算机操作系统都支持“多任务”(Multitasking)。虽然计算机的中央处理器(CPU)在同一时刻只能运行一个程序(双核心则支持两个),但是由于CPU的速度极快,每秒能执行几十亿条机器语言指令,因此系统可以划分出微秒级的时间片,通过合理的任务调度快速切换执行程序,从人类的角度看就是在同时运行了。
  虚谷号上运行的是Linux系统,有很多方法实现任务调度。说起用Python代码实现定时执行任务,大家肯定会想到用“sleep”,代码如图1所示。
  在循环中加“sleep”的做法显然不够好,最大的缺點是只能执行固定间隔时间的任务,不支持定时任务,如早上六点半播放起床铃声。另外,“sleep”是一个阻塞函数,也就是说在“sleep”这一段时间,计算机什么都不能做。因而,要实现很多任务的调度,一般会使用Python标准库中的sched模块,参考代码如图2所示。
  sched模块在调度器类使用一个延迟函数,等待特定的时间执行任务,同时支持多线程应用程序,在每个任务执行后会立刻调用延时函数,以确保其他线程也能执行。但是,如果要调度的任务是周期性的,而且任务比较多,用sched模块实现依然不够方便。这时,我们需要使用功能更加强大的第三方库,如schedule或者APScheduler。
  ● Python的任务调度库Schedule简介
  Schedule是一个非常小巧的任务调度库,其安装方法如下:
  pip install schedule
  Schedule的使用方法很简单,只要把要执行的任务封装为一个个函数,然后用Schedule去调用对应的函数名即可,代码可读性非常好。参考代码如下页图3所示。
  看到“seconds.do”的语句,是不是立刻秒懂?这就是Schedule的最大优势之一。Schedule支持很多种调度任务的方法,具体如下表所示:
  Schedule还支持传递参数,具体请参考Schedule的官方文档。
  (地址:https://schedule.readthedocs.io/en/stable/)
  需要强调的是,Schedule也是阻塞型的。如果要避免阻塞,我们可以借助threading模块,以多线程的方式进行工作。
  ● 定时铃声广播系统的代码编写
  我做的定时铃声广播系统并没有使用其他硬件,一块虚谷号加声卡和小音箱即可。当然,因为定时广播内容来自网络,如天气预报和英语听力,所以需要设置上网。这里的代码其实适用于绝大多数类似虚谷号的迷你电脑,如树莓派、拿铁熊猫,或者其他小型的电脑主机。
  1.获取天气预报信息
  这里采用的是“心知天气”的接口,用Requests获取,然后逐一取出需要的信息即可。参考代码如图4所示。
  2.获取英语听力内容
  通过Requests获取一个词典网站上的“每日一句”的内容,再用正则表达式找到需要的内容。参考代码如下页图5所示。
  函数返回两个字符型变量,分别为文本和音频地址,如下页图6所示。
  3.合成声音
  虽然声音的合成可以直接用Pytts库,但如果追求语音的质量,则推荐调用百度AI平台的接口。考虑到突然间的语音播放会吓人一跳,我在播放语音前,先播放一个“叮”的提示音。参考代码如下页图7所示。
  4.定时播放铃声
  虽然核心代码看起来有点长(如下页图8),但它类似于计划任务的清单,一看就明白。
  相关代码已经收集在虚谷号的课程中,下载地址为:https://github.com/vvlink/vvBoard-docs。
  ● “定时任务”功能的应用
  在中小学的创客作品中,“动作触发”类多如牛毛,而“时间触发”类却寥寥无几。其中的原因有很多。例如,之前习惯于使用Arduino,而Arduino没有内置时间模块,实现定时任务的功能有点麻烦,大家的思维被局限了。又如,定时任务往往在内部执行,在外部看不出工作流程,展示起来不直观。再如,很多作品并没有“真正”运行,仅仅停留在展示层面。“时间触发”类作品解决的是需要长期运行的问题。
  生活中很多问题需要用定时执行的方式去解决,如定时打铃、定时开门、定时拍照等。当我们从Arduino、掌控板等单片机系统,逐步升级到虚谷号、树莓派、拿铁熊猫等能够运行Linux、Windows操作系统的迷你电脑时,借助于Python强大的第三方库,能够实现的功能就越来越多了。创客教师需要引导学生关注生活中的各种应用,不断提出新的需求,不断挑战新的难题。
其他文献
摘 要:在初中教学阶段,英语是一门重点学科。教师在初中英语教学过程中,应该突破传统教学思想的限制,打开教学思路,融合多元化的教学手段,构建互动式教学模式,为学生创造更多互动交流的机会,强化学生的教学主体地位,从根本上调动学生对英语课程的学习热情,提升学生的学习积极性,引导学生敢于发表内在观点,增强学生的思考能力和探索能力,深化学生对教材内容的记忆和理解,实现教师满意的教学目标。  关键词:互动式教
以现今智慧档案馆的建设理念为背景,分析智慧档案馆的建设现状。提出智慧服务建设中存在的问题和建议,探讨在疫情防控期间使用“非接触式”智慧服务的应用,推动智慧档案馆档
如何有效地开展写作教学是困扰高职英语教师的难题之一。以信息技术为支撑,尝试以“产出导向法”理论为指导,从教学目标、设计思路、教学过程等方面来构建英语写作教学模式,
摘 要:思维导图教学模式在初中化学教学中的应用体现了教育的创新化发展趋势。教师可主要探究思维导图在初中化学教学中的应用优势,分析初中化学教学中思维导图教学模式的应用条件,并提出兴趣激发、问题驱动、体系建构、复习巩固、思维延伸等思维导图在初中化学教学中的应用实践路径,旨在充分优化初中化学教学环境,提高学生的参与度。  关键词:初中化学;思维导图;核心素质  中图分类号:G63 文獻标识码:A
幼儿能不能学习党史?这是笔者所在幼儿园近来一直关注,而且在努力实验的课题。  笔者所在幼儿园是一个以“地方文化”为特色的幼儿园,为了方便幼儿了解江夏的历史,幼儿园把优秀的传统文化外显于形,不仅模拟金口江边的沙滩、湖泗的古瓷窑、纸坊的造纸作坊,努力还原古人的劳作,而且还开展诸如法泗洲的采莲船、金口的草把龙、谭(鑫培)派京剧表演活动。但是,怎样结合党史教育开展红色文化传承,却一度遭遇了“瓶颈”。  今
《历史上的今天》曾是央视一档很知名的节目,主持人在这里讲历史、讲法治、讲兵器……但是,“江夏历史上的今天”却是鲜为人知的,那些深藏在“江夏今天”里的红色故事、革命英雄,师生们知道的就更少了。  然而,当日历翻到中国共产党建党100周年的2021年时,几所密切关注红色文化的学校,借助本地文化学者的力量,开发出了一个视频小系列,录制了多个抖音,从而开启一门新的校本课程,引导一群又一群师生走进了这些早就
了解和比较国外、国内高校情报人才培养模式的情况,有利于更好地促进国内高校情报人才培养模式的转变,为新时代国内情报人才培养的进一步探究提供有意义的参考与借鉴。分析现