【问题标题】:Run tasks every day at 8am in Django on Windows每天早上 8 点在 Windows 上的 Django 中运行任务
【发布时间】:2020-10-06 12:08:52
【问题描述】:

我正在使用 Django 开发一个网络应用程序,我需要每天早上 8 点向数据库发送一些随机数。

我曾尝试使用芹菜,但没有奏效。我正在使用 Windows,从教程中我了解到 celery 在 Windows 上不起作用。

我曾尝试使用 django-extensions 和 django-cron,但它需要对 linux cron 进行更改,正如我之前所说,我在 windows 上。

我应该如何解决这个问题?任何帮助将不胜感激。

【问题讨论】:

  • 你不能在一个简单的while True 循环中生成一个检查时间的子进程/线程吗?
  • @alec_djinn 我正在做一个重要的项目,我想以标准的方式来做,但我不知道我该怎么做......我只是认为使用 While True 不是太合适了。

标签: python django windows periodic-task


【解决方案1】:

我终于找到了完成这项工作的好方法。 在像我一样的情况下,您可以在需要调度时使用 APScheduler 作为强大的工具:

https://apscheduler.readthedocs.io/en/stable/index.html


更新:

为了定期做一些工作,您还可以使用 Schedule 作为一个简单而有用的工具: https://schedule.readthedocs.io/en/stable/

【讨论】:

    【解决方案2】:

    除非你真的需要一个调度器,否则我会简单地使用这样的东西:

    import time, datetime
    
    while True:
        now = datetime.datetime.now()
        if now.hour == 8 and now.minute == 0:
            send_rnd_numbers_to_database()
            time.sleep(24*60*60 - 120) #sleep almost 24h
        else:
            time.sleep(15) #check every X seconds, adjust as you need
    

    发送第一个号码后,它会在 8:00 前几分钟休眠和唤醒。然后它会根据您的需要经常检查。

    您可以将其作为线程、子进程或仅作为独立于您的应用程序的脚本运行。如果需要,您可以在函数周围添加 try/except 块,以及超时处理。

    【讨论】:

      【解决方案3】:

      尝试django-windowsauthcreatetask 命令。您可以使用它轻松地为 Django 管理命令创建 Windows 任务计划程序作业。

      https://django-windowsauth.readthedocs.io/en/latest/howto/create_tasks.html

      为此,请为您的应用创建一个新的自定义管理命令: https://docs.djangoproject.com/en/3.1/howto/custom-management-commands/

      然后运行: > py manage.py createtask your_custom_task -i days=1

      打开 Windows 任务计划程序(在开始菜单中搜索计划程序),打开新创建的作业,将触发器开始时间编辑为上午 8:00。

      【讨论】:

        【解决方案4】:

        大约一年前,我处于你现在的境地。我一直在寻找 Windows 上 Django 的后台计划任务解决方案,但似乎没有什么特别突出的。

        看看这些:

        或者简单地说,只是使用 Windows Task Scheduler 来执行 python 脚本,但是,上面的两个包可以帮助您从 Django 按需执行长时间运行的任务,或者也可以从 Django 设置调度。

        【讨论】:

          猜你喜欢
          • 2015-12-03
          • 2020-01-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-18
          • 1970-01-01
          • 1970-01-01
          • 2014-09-29
          相关资源
          最近更新 更多