2017-04-11 195 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之後所有:只需每分鐘運行一次腳本,或者如果足夠精細的話每運行十次腳本,如果當時沒有任何事情可以完成,就可以退出而不做任何事情。