如何在Python中得到相似于Cron的调度程序? [关闭]

关闭。 这个问题是 题外话 。 它当前不接受答案。

想改善这个问题吗? 更新问题 ,使其成为Stack Overflow 的主题html

3个月前关闭。 python

我正在寻找Python中的库,它将提供atcron同样的功能。 git

我很想拥有一个纯Python解决方案,而不是依赖于安装在盒子上的工具; 这样,我能够在没有cron的机器上运行。 github

对于不熟悉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时间表达式语法不过重要,可是我但愿具备这种灵活性。 工具

若是没有什么能够为我提供开箱即用的功能,将不胜感激地收到有关构建基块进行相似操做的任何建议。 ui

编辑我对启动过程不感兴趣,只是对用Python写的“工做”-python函数。 必要时,我认为这将是一个不一样的线程,但不会出如今不一样的过程当中。 spa

为此,我正在寻找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个小时以上的计算时间,则还须要付费。

[1] http://www.picloud.com

[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来监控任务。 它还有一个依赖图。 对于你须要的东西可能有点过度,但它可能会成功。

相关文章
相关标签/搜索