【问题标题】:Fire a python script at a specific time在特定时间触发 python 脚本
【发布时间】:2015-09-07 04:49:17
【问题描述】:

我正在尝试在 python 中构建一种工作系统。这包括一个前端网页,允许人们安排在 x 时间运行的作业。然后 PHP 将包括运行时间在内的作业写入数据库。然后我在我的服务器上运行了一个 python cronjob,它将每 30 分钟检查一次以查看是否有新工作。如果有,它将触发一个调度脚本,以倒计时到触发前事件/作业的确切分钟。

我用于调度程序的脚本可以在:https://github.com/dbader/schedule 找到。这似乎是一个非常好的脚本,我在另一个 SO 页面上找到了它。但是 - 通过 PIP 安装后,模块似乎无法正常工作?

尝试运行计划脚本 - Python 引擎在以下情况下崩溃: schedule.today.at('14:38').do(job) 我只需要运行一个可以重复使用的一次性调度器来同时调度多个作业。这些工作在下周同一时间重复的可能性很小,因此我喜欢日程安排模块。

这是我从 GIT 上的几个 sn-ps 构建的示例代码:

import schedule
import time

def job():
    # Do some work ...

    print("Hello World")
    return schedule.CancelJob

#schedule.every(10).seconds.do(job)
schedule.today.at('14:38').do(job)

while True:
    schedule.run_pending()
    time.sleep(1)

如果其他人遇到同样的问题 - 或者对如何实现这一点有其他想法 - 请告诉我!!

【问题讨论】:

    标签: python git cron


    【解决方案1】:

    查看 master 分支上的源代码,schedule 没有暴露一个名为 today 的属性。如果您看到使用此类属性的示例,那么问题似乎是您使用的是已从中删除它的库版本。

    不幸的是,如果您的主要要求是能够安排一次性任务,那么这个库看起来不太合适。

    编辑

    没有today属性,所以FAQ中提到的sn-p不能直接工作,但你应该能够挽救它的基本思想:

    def job_that_executes_once():
        # Do some work ...
        return schedule.CancelJob
    
    schedule.every().day().at('14:38').do(job_that_executes_once)
    

    编辑 2

    可能有用:“只做一次”装饰器。

    from functools import wraps
    
    import schedule
    
    
    def do_once(func):
        @wraps(func)
        def wrapped(*args, **kwargs):
            func(*args, **kwargs)
            return schedule.CancelJob
        return wrapped
    
    @do_once
    def some_one_off_job():
        # Do some work
        # No need to return schedule.CancelJob
        print 5
    
    @do_once
    def some_other_one_off_job():
        # hooray, decorators!
        pass
    
    schedule.every().day().at('14:38').do(some_one_off_job)
    schedule.every().day().at('14:38').do(some_other_one_off_job)
    

    【讨论】:

    • 你还有什么推荐的吗?
    • 更新我的答案以代替常见问题解答。没有today 属性,但看起来你仍然可以挽救他们提出的想法,即在完成任何需要的工作后立即取消重复性工作。
    • 非常感谢先生。享受您的投票和正确答案
    猜你喜欢
    • 1970-01-01
    • 2018-01-11
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多