【问题标题】:Django execute task on time specified in model datetime fieldDjango 在模型日期时间字段中指定的时间执行任务
【发布时间】:2013-07-08 06:32:10
【问题描述】:

我相信有一个简单的问题,但它还是让我陷入了困境。

假设我有一个简单的模型:

class myModel(models.Model):
    expires = models.DateTimeField(...)

我想,说在指定的时间做某事:发送电子邮件,删除模型,更改某些模型字段......某事。 django core 中有没有工具可以让我这样做?

或者,如果不是,我认为一些任务排队工具可能是有序的。我有djcelery 在我的项目中工作,虽然我是一个完全新手,到目前为止我所能做的就是运行django-celery-email 包,以便异步发送我的邮件。虽然我不能说我完全有能力定义任务和工人在后台工作并且是可靠的。

如果有任何想法,关于如何解决此类问题,请不要犹豫=)

【问题讨论】:

    标签: python django django-models django-celery


    【解决方案1】:
    1. 写一个custom management command 来完成你想要的任务。完成后,您应该可以使用python manage.py yourtaskname 运行您的任务。

    2. 使用cronatperiodic tasks in celerydjango-crondjangotaskschedulerdjango-future 来安排您的任务。

    【讨论】:

      【解决方案2】:

      我认为最好的是后台任务,它读取日期时间并在达到或已经达到日期时间时执行任务。

      查看scheduled task此处给出的解决方案

      所以工作流程是:

      • 创建要应用于已到日期的对象的任务
      • 创建一个检查数据库中日期时间的管理命令,并为每个达到日期时间的对象执行上述任务
      • 使用 cron (Linux) 或 at(Windows) 来安排命令调用

      【讨论】:

        【解决方案3】:

        如果您在类似 UNIX 的机器上,您可能有权访问 cronjobs。如果您使用的是 Windows,我听说有一个名为 at 的程序可以做类似的事情。如果这不符合您的需求,有很多方法可以使用time 库(time.sleep(SOME_NUMBER_OF_SECONDS) 在循环中与您想做的任何其他事情一起做,如果您想定期做某事,那么每 X 小时做一次事情) ,否则您需要查看time.localtime() 并检查条件)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-22
          • 1970-01-01
          • 2018-05-17
          • 1970-01-01
          • 1970-01-01
          • 2012-02-27
          相关资源
          最近更新 更多