微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异常 被抛出。这会告诉您任务正在阻塞设备,并且可能会阻止下一个操作的执行 在下一秒。这将取决于程序员在截获这个错误后将做什么。他什么也做不了, 他可以处理错过的任务。在
  • 如果在给定的时间有几个函数要运行,那么它们将在没有特定顺序的情况下启动。在

如何测试

复制测试.py将文件从https://github.com/fizista/micropython-mcron.git存储库发送到测试板 并在此设备上运行命令:

importtests

支持和许可

如果你发现了错误或其他问题,写下问题。在

如果您需要此库的不同许可证(例如商业许可证), 请与我联系:fizista+mcron@gmail.com。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何使用“Wed,01 Jul 2015 17:32:41 EDT”解析字符串   java Storm apache升级(1.0.0到2.0.0)   java类驻留在不同的目录中,而不是包指定的目录。为什么?   将Java中的图像缩放到非常小的维度   java如何通过子文档从自定义方面访问ElasticSearch parentdoc字段   java如何在RationalSoftwareArchitect中使用findbugs?   Java中的事件提升处理   java值被添加到arrayList的所有索引中,而不是在“”时添加到最后一个索引中。正在使用arraylist的add()方法   JFrame中的java JPanel派生类   java如何用循环和异步方法模拟类   java Android阻止可绘制背景超出视图范围   为客户排序Java阵列   java Apache poi如何将工作表设置为枚举位置值属性?   java Rhino在使用自定义类参数调用javascript函数时出错   java格式化日期从年月日到年月日   spring如何修复java。lang.illegalargumentexception在此特定场景中是否尝试创建具有null实体的合并事件?   java如何创建更好的对象