我将第一个Django应用程序部署在Heroku上。在此应用程序中,我有各种各样的自定义管理命令,我想定期运行。例如,我需要一个命令每两周运行一次,另一个命令每周日和星期三运行,另一个命令每周运行一次。我已经阅读了一些不同的选择,包括芹菜,Heroku调度程序和Cron。我不确定选择哪种解决方案以及原因。
在Heroku,Cron和Heroku调度程序上大致相同。
HEROKU调度程序:
这是我最后检查的Heroku的Beta功能。不能保证有100%的正常运行时间。如果您有付费客户,而这些定期任务至关重要,那么您不应该依靠这一点。如果您正在寻找一种免费的方法来实施不太关键的事情的定期任务,那么Heroku Scheduler将为您工作。
芹菜:
这是一个异步任务库。它非常大且健壮,可以做几乎所有您想要的事情。与Cron的最大区别是,您可以安排一个异步任务以在任何给定时间运行,而不仅限于定期任务(每X分钟/天运行的内容等(。这种稳健性是有代价的。在生产和本地设置更困难。尤其是本地。在生产中,我建议CloudAMQP用于经纪人,并为结果重新列出。仅将任务参数作为原始参数,以避免腌制并保持消息大小。
如果您需要可靠的东西,但不想使用芹菜,还有RQ和DRAMATIQ。
可能对您有用的另一个选项是我们最近添加的Heroku附加组件,称为Cron to Go。它比Heroku调度程序更可靠,并且更灵活,因为您可以使用任何CRON表达式来安排您的后台作业。它可能比芹菜更便宜,芹菜要求您始终使用Dynos,并且更容易维护,因为您不必每次更改时间表时都需要推动代码更改。