我正在寻找Python中的库,它将提供at
和cron
一样的功能。
我很想拥有一个纯Python解决方案,而不是依赖于安装在盒子上的工具; 这样,我可以在没有cron的机器上运行。
对于不熟悉cron
:您可以根据以下表达式来计划任务:
0 2 * * 7 /usr/bin/run-backup # run the backups at 0200 on Every Sunday
0 9-17/2 * * 1-5 /usr/bin/purge-temps # run the purge temps command, every 2 hours between 9am and 5pm on Mondays to Fridays.
cron时间表达式语法不太重要,但是我希望具有这种灵活性。
如果没有什么可以为我提供开箱即用的功能,将不胜感激地收到有关构建基块进行类似操作的任何建议。
编辑我对启动过程不感兴趣,只是对用Python写的“工作”-python函数。 必要时,我认为这将是一个不同的线程,但不会出现在不同的过程中。
为此,我正在寻找cron时间表达式的可表达性,但是在Python中。
Cron 已经存在了很多年,但我正在尝试尽可能地便携。 我不能依靠它的存在。
#1楼
另一个简单的解决方案是:
from aqcron import At
from time import sleep
from datetime import datetime
# Event scheduling
event_1 = At( second=5 )
event_2 = At( second=[0,20,40] )
while True:
now = datetime.now()
# Event check
if now in event_1: print "event_1"
if now in event_2: print "event_2"
sleep(1)
而类aqcron.At是:
# aqcron.py
class At(object):
def __init__(self, year=None, month=None,
day=None, weekday=None,
hour=None, minute=None,
second=None):
loc = locals()
loc.pop("self")
self.at = dict((k, v) for k, v in loc.iteritems() if v != None)
def __contains__(self, now):
for k in self.at.keys():
try:
if not getattr(now, k) in self.at[k]: return False
except TypeError:
if self.at[k] != getattr(now, k): return False
return True
#2楼
“ ... Crontab模块,用于读取和写入crontab文件以及仅通过直接API即可自动访问系统cron。...”
http://pypi.python.org/pypi/python-crontab
还有APScheduler(一个python软件包)。 已经编写和调试。
http://packages.python.org/APScheduler/cronschedule.html
#3楼
您可以查看PiCloud的[1] Crons [2],但请注意,您的作业不会在您自己的计算机上运行。 如果您每月使用20个小时以上的计算时间,则还需要付费。
[2] http://docs.picloud.com/cron.html
#4楼
如果您正在寻找轻巧的结帐时间表 :
import schedule
import time
def job():
print("I'm working...")
schedule.every(10).minutes.do(job)
schedule.every().hour.do(job)
schedule.every().day.at("10:30").do(job)
while 1:
schedule.run_pending()
time.sleep(1)
披露 :我是那个图书馆的作者。
#5楼
查看luigi( https://github.com/spotify/luigi )。 它是用python编写的,有一个很好的Web UI来监控任务。 它还有一个依赖图。 对于你需要的东西可能有点过分,但它可能会成功。
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3207297