Django按照模型日期时间字段中指定的时间执行任务

时间:2013-07-10 10:52:16

标签: python django django-models django-celery

我相信,有一个简单的问题,但无论如何它让我陷入困境。

说我有一个简单的模型:

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

我希望,在指定的时间说一些事情:发送电子邮件,删除模型,更改一些模型字段......某事。 django核心中是否有工具允许我这样做?

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

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

3 个答案:

答案 0 :(得分:4)

  1. 写一个custom management command来完成你想要的任务。完成后,您应该可以使用python manage.py yourtaskname

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

答案 1 :(得分:1)

我认为最好的是后台任务,如果达到或已达到日期时间,则读取datime并执行任务。

请参阅此处给出的scheduled task

解决方案

所以工作流程将是:

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

答案 2 :(得分:-1)

如果您使用的是类似UNIX的计算机,则可能有权访问cronjobs。如果您使用的是Windows,我会听到有一个名为at的程序可以执行类似的操作。如果这不符合您的需求,有很多方法可以使用time库每隔X小时执行一次操作(time.sleep(SOME_NUMBER_OF_SECONDS)在一个循环中,如果您有任何其他想做的事情,它将会执行此操作想要定期完成某些事情,否则你需要查看time.localtime()并检查条件。