如何使用 Heroku 和 Django 实现简单的 cron 作业

Posted

技术标签:

【中文标题】如何使用 Heroku 和 Django 实现简单的 cron 作业【英文标题】:How to implement simple cron job with Heroku and Django 【发布时间】:2014-02-08 10:15:43 【问题描述】:

我有一个在 Heroku 上运行并使用 Heroku Postgres 数据库的 Django 应用程序。它的流量非常低,而且我希望将每月的成本保持在尽可能低的水平(现在,它使用 Heroku 的 750 小时/月免费运行)。我有一些简单的 cron 作业,实现为对 Django 管理命令的调用,我想运行这些作业,但我不确定如何使用 Heroku 执行此操作。我已经阅读了一些关于调度程序的内容,但仍然对一些事情感到困惑。首先,如果调度程序运行在一个独立的测功机上,它如何调用 Django 的 manage.py 文件?其次,调度程序任务通常占用多少 dyno-hours?例如,如果任务只需要 30 秒即可运行,我是否只需要为 30 秒的使用量付费,还是与旋转(然后关闭)测功机相关的成本更高?

【问题讨论】:

【参考方案1】:

首先,如果 Scheduler 在自包含的测功机上运行,​​它如何调用 Django 的 manage.py 文件?

当您上传(推送)您的项目时,它会被编译成slug。这个 slug 被分发到运行你的 web 应用程序的每个 dyno 以及每个 1 off dyno 上。这意味着在您运行的每个测功机上都会有一个 manage.py 副本,无论是通过调度程序还是 heroku run 命令。


其次,一个 Scheduler 任务通常会占用多少 dyno-hours?

Scheduler add-on 运行一次性 dyno,将计入您每个月的 dyno 小时数。


如果任务只需要 30 秒即可运行,例如,我是否只按 30 秒的使用量计费,还是与旋转(然后关闭)测功机相关的成本更高?

执行一次性测功机所花费的任何时间都会增加使用量,并且会像任何其他测功机一样收费。

这意味着使用 30 秒的任务需要 30 秒的测功时间 (REF)。我不相信您需要为启动/停止时间付费,但您需要为 python 加载您的应用程序到它可以运行您的管理命令的时间付费,所以尽量保持您的应用在自举时间方面尽可能轻。

【讨论】:

【参考方案2】:

其实你可以试试APScheduler。

它甚至允许 1 分钟的周期任务,并且完全免费。

您只需要定义时钟进程并打开时钟。

您可以在page 上查看分步教程。

【讨论】:

以上是关于如何使用 Heroku 和 Django 实现简单的 cron 作业的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Heroku 上使用 Channels 和 Celery 部署 Django?

如何使用docker上传和部署django cookiecutter项目到heroku?

如何调试使用 whitenoise、gunicorn 和 heroku 服务的 django 静态文件?

如何在 heroku 上部署 django+swamp dragon 实时聊天应用程序?

在 Heroku 中使用 Braintree 和 Django 应用程序

Heroku 和 Django 组合中的 Postgresql 更改与共享数据库