Django,如何在特定时间触发函数?

7 浏览
0 Comments

Django,如何在特定时间触发函数?

我正在使用 Django 开发一个 web 应用程序,我想知道有没有一种方式可以定期运行任务。

基本上,我只想定期自动地遍历数据库并进行一些计算/更新,但我似乎找不到任何有关如何实现这一点的文档。

有人知道如何设置这个功能吗?

为了澄清一下:我知道我可以设置一个 cron 任务来完成这个工作,但我想知道 Django 中是否提供了此功能。我希望人们能够自己部署这个应用程序而不需要进行太多的配置(最好是零配置)。

我考虑通过简单地检查最后一次请求发送到站点以来是否应该运行任务来触发这些操作“追溯”,但我希望有更清晰的方法。

admin 更改状态以发布 2023年5月22日
0
0 Comments

Celery是一个基于AMQP(RabbitMQ)构建的分布式任务队列。 它还以类似于cron的方式处理定期任务(请参见定期任务)。根据您的应用程序,它可能值得一探究竟。

使用django设置Celery相当容易(文档), 在停机的情况下,定期任务将跳过已错过的任务。Celery还具有内置的重试机制,以防任务失败。

0
0 Comments

我采用的一种解决方案是:

1) 创建一个自定义管理命令,例如

python manage.py my_cool_command

2) 使用 cron (在 Linux 上) 或 at (在 Windows 上) 在所需时间运行我的命令。

这是一个简单的解决方法,不需要安装沉重的 AMQP 堆栈。不过,像其他答案中提到的 Celery 这样的东西有很好的优势,特别是对于不希望将应用逻辑分散在 crontab 文件中的人来说,使用 Celery 是不错的选择。然而,对于小到中型应用程序以及不想有太多外部依赖的应用场景,cron 解决方案非常适用。

编辑:

在较新版本的 Windows 中,at 命令已废弃,适用于 Windows 8、Server 2012 及以上版本。您可以使用 schtasks.exe 做同样的事情。

**** 更新 ****
这是编写自定义管理命令的 Django 文档的新链接

0