Django在model datetime字段中指定的时间执行任务

2024-05-16 00:47:51 发布

您现在位置:Python中文网/ 问答频道 /正文

有个简单的问题,我想,但它还是让我卡住了。在

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

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

我想,比如在指定的时间做点什么:发邮件,删除模型,更改一些模型字段。。。什么。django core中是否有一个允许我这样做的工具?在

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

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


Tags: 工具项目djangocore模型model队列models
3条回答
  1. 写一个custom management command来完成你想要的任务。完成后,您应该能够使用python manage.py yourtaskname运行任务。

  2. 使用cronatperiodic tasks in ^{}^{}^{}或{a5}来安排任务。

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

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

关于scheduled task,请参阅此处给出的解决方案

所以工作流程应该是:

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

相关问题 更多 >