【问题标题】:Python Schedule - Execute at the time of server startingPython Schedule - 在服务器启动时执行
【发布时间】:2020-11-17 20:06:20
【问题描述】:

我需要执行一个任务。 我想每隔 30 天删除一个表的详细信息。 我想在我们的服务器启动时自动执行任务(在执行 python manage.py runserver 之后)

然后我尝试了 pip 安装时间表

我的调度函数

def set_timeschedule():
   HeartBeatLog.objects.all().delete()

那我不明白我调用了这个函数

所以我在 urls.py 中调用了这个

if date.today().day == 28:
  schedule.every().day.at("16:36").do(set_timeschedule)

为测试添加的时间(我需要在 30 天内执行它们) 这里 HeartBeatLog 是我的模态。我无法在 manage.py 或 urls.py 中得到这个

但它不起作用

  1. 这是完成任务的正确方法吗?
  2. 我怎样才能得到确切的数据。
  3. 我把这段代码放在哪里,以便在启动服务器时删除数据。
  4. 是否可以在执行 1 次后终止调度

【问题讨论】:

    标签: python pip scheduled-tasks schedule


    【解决方案1】:

    你可以这样设置:

    def set_timeschedule():
        if date.today().day == 28:
            HeartBeatLog.objects.all().delete()
    
    schedule.every().day.at("16:36").do(set_timeschedule) # Sets up a job
    
    while True:
        schedule.run_pending() # Checks for active jobs and runs
        sleep(900) # Sleep for 900s
    

    您需要为计划运行的作业设置 run_pending()

    【讨论】:

    • 嗨@cyneo 我需要在哪个文件中写这个?我想在 python manage.py run server 启动时执行这个
    • 听起来你想要它在 manage.py 中。请注意,这意味着实例必须无限期地继续运行。我个人在 sleep(900) 之前添加了一条打印语句,这样我就可以知道实例是否因任何原因停止。
    • ok... HeartBeatLog 是我的模型,但我无法在 manage.py 或 urls.py 中访问它
    • 关键是你需要调用 schedule.run_pending() 让它运行,否则你只是在排队而不是运行它们。抱歉,但我不能真正建议您如何重组示例函数。 =)
    • 是的,但这也意味着您可以编写一次执行此操作的函数,而无需使用 schedule 模块 =)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 2016-09-08
    相关资源
    最近更新 更多