微Python的微康。
micropython-mcron的Python项目详细描述
MicroPython的micron
micron是一个基于时间的任务调度程序。在
这个库是在经历了它更大的前身SimpleCRON之后设计的。当前图书馆的重点 在保持最大功能的同时实现代码的最小化。它占用的内存比SimpleCRON少3倍。 它需要大约3kB的内存才能工作。在
该软件在micropython1.12(esp32,esp8266)下进行了测试。在
使用此库可以做什么:
- 以精确定义的时间间隔运行任何任务
- 在程序运行时删除和添加任务。在
- 运行任务一定次数,甚至更多。在
库工作原理:
一般来说,在伪代码中,工作原理是:
insert(action_period, action_pointers, 'minute_5s', callback) while (the hardware timer is running): current_action_period_pointer = current_time % action_period if current_action_period_pointer in action_pointers: run callback
我们几乎完全可以自由选择动作周期,只要它大于零。在
action_pointers变量应包含“set”或“range”类型的数据。在
当我们想使用不规则的时间点时,我们使用“set”。否则,您可以使用“范围”。这给了我们最小的 内存开销,同时在定义何时开始操作方面有很大的自由度。在
要求:
- 安装micropython的板(v1.12)
- 板必须支持硬件计时器。在
安装
您可以使用upip安装:
^{pr2}$或者
micropython -m upip install -p modules micropython-mcron
您可以克隆此存储库,然后手动安装:
git clone https://github.com/fizista/micropython-mcron.git
cd ./micropython-mcron
简单示例
每5秒运行一次简单代码:
importutimeimportmcronimportmcron.decoratorsc=0defcounter(callback_id,current_time,callback_memory):globalcc+=1print('call: %s%s'%(c,utime.localtime()))mcron.init_timer()mcron.insert(mcron.PERIOD_MINUTE,range(0,mcron.PERIOD_MINUTE,5),'minute_5s',counter)
每天早上6:30和晚上10:30开始任务。在
mcron.insert(mcron.PERIOD_DAY,{6*60*60+30*60,22*60*60+30*60},'day_6_30__22_30',callback)
每天开始4次任务。在
mcron.insert(mcron.PERIOD_DAY,range(0,mcron.PERIOD_DAY,mcron.PERIOD_DAY//4),'day_x4',callback)
从现在开始每11秒开始任务。在
mcron.insert(11,{0},'11s_now',callback,from_now=True)
每11秒开始一次任务。在
mcron.insert(11,{0},'11s',callback)
成功启动任务三次。每隔5秒启动此任务。在
mcron.insert(mcron.PERIOD_MINUTE,range(0,mcron.PERIOD_MINUTE,5),'minute_5s_3x_suc',mcron.decorators.successfully_run_times(3)(lambda*a,**k:utime.time()%10==0))
开始任务三次。每隔5秒启动此任务。在
mcron.insert(mcron.PERIOD_MINUTE,range(0,mcron.PERIOD_MINUTE,5),'minute_5s_3x',mcron.decorators.run_times(3)(callback))
删除操作:
mcron.remove('action_id')
删除所有操作:
mcron.remove_all()
通过替换和/或添加您自己的函数,可以捕获操作错误。在
defmy_exception_processor(e):send_exception_to_server(e)write_exception_to_disk(e)mcron.callback_exception_processors.append(my_exception_processor)
重要提示:
- 如果所有任务的执行时间超过(1000ms-1.5*\u timer_period),则TLPTimeException异常 被抛出。这会告诉您任务正在阻塞设备,并且可能会阻止下一个操作的执行 在下一秒。这将取决于程序员在截获这个错误后将做什么。他什么也做不了, 他可以处理错过的任务。在
- 如果在给定的时间有几个函数要运行,那么它们将在没有特定顺序的情况下启动。在
- 项目
标签: