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

牧云@^-^@ 提交于 2020-03-20 18:36:04

3 月,跳不动了?>>>

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

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

3个月前关闭。

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

我很想拥有一个纯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个小时以上的计算时间,则还需要付费。

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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!