2017-04-11 180 views
0

我正试图在将在特定时间运行函数的树莓派创建一个独立程序。我做了一些研究,似乎都指向使用crontab。我理想的情况是不喜欢使用crontab,因为我希望能够稍后分享该程序,并要求用户编辑他们的crontab似乎有点侵入性。该程序将包括运行计划任务(每天在特定时间运行),常量任务(循环收集数据并每3秒在LCD上显示)以及间隔任务(每15分钟运行一定功能)。在python中运行计划任务

我的问题是,什么是实现这一目标的最有效方法?我最初的想法是创建一个函数,它查看时间元组以及是否声明来确定要运行的内容,但即使作为新手,这听起来也很笨拙。 '时间表'包似乎很有前途,但我不确定如何在不断运行的循环背景下整合计划任务。有没有人有过这样的程序的任何经验,也许有一些代码已经为他们工作的例子?

+0

我会建议:工作线程(即时间表),后台进程,芹菜。按照需求顺序。 – dhke

回答

0

检查最近的讨论

How do I get a Cron like scheduler in Python?

对于其他一些例子,著名的https://apscheduler.readthedocs.io,它具有很好的网页。根据我自己的经验,国内种植的库或扩展受到夏季时间问题的困扰。我认为性能可能会成问题,新的调度工具通常具有性能和其他限制,而cron是令人尊敬的,经过测试(即使早期的实现太天真了)。一个有趣的文章http://infiniteundo.com/post/25326999628/falsehoods-programmers-believe-about-time

0

你正在寻找的魔法词是'服务'。这些是操作系统在启动时(例如)启动的长时间运行的进程,并且在理想情况下会定期检查并在必要时重新启动。

我还没有做过,如果对于树莓派,但我发现这看起来很有前途。这假定你的python脚本在/root/mouse.py

首先,在服务定义,例如,/lib/systemd/system/mouselogger.service

[Unit] 
Description=Mouse Logging Service 

[Service] 
ExecStart=/root/mouse.py 
StandardOutput=null 

[Install] 
WantedBy=multi-user.target 
Alias=mouselogger.service 

然后,启用与控制台上:

sudo systemctl enable mouselogger.service 
sudo systemctl start mouselogger.service 

你的脚本应该然后管理它自己的睡眠,例如:

from time import sleep 
while True: 
    sleep(2) 
    print("hello!") 

另一个可能更简单的选项是使用crontab之后所有:只需每分钟运行一次脚本,或者如果足够精细的话每运行十次脚本,如果当时没有任何事情可以完成,就可以退出而不做任何事情。