目前,我们有一个为学校定制的cms产品,它是在django中构建的,并通过heroku部署。我为我们添加的每个学校系统做一个新的部署。(我想把我的系统切换到多租户系统,但这将是一个大项目。)我最近添加了一些异步工作效果最好的功能(针对数据库密集型操作的电子邮件和异步缓存刷新)。我把我的背景任务写成了芹菜任务,它们运行得很好。问题是,让一名芹菜工人24小时不间断地运行每个应用程序将花费我34.50个月的费用,而事实上,这些任务每天只有几分钟的非空闲时间。考虑到我目前对每个客户端使用不同实例的方式,这种成本将使使用heroku几乎不可行。是否有人处理过这种情况,并可以建议如何能够定期进行后台处理(最好是使用芹菜),而不必全天候运行工人流程。缓存刷新程序需要每隔几分钟运行一次,但电子邮件发送程序很少运行(只有当他们向订阅者发送电子邮件时)。
如果您不需要员工立即参与,您可以使用调度器插件定期清除任务队列。
如果您需要更快的响应时间,请查看Heroku API的Python包装器。有了它,您可以使用各种方法来检测何时需要运行工作程序,并动态地向上旋转一个工作程序,在不需要时再向下旋转。这是一项不平凡的工程任务。
有趣的是,在我发布博客的同一天,我的RSS订阅源就给出了这个问题的答案。
http://heyman.info/2012/dec/6/heroku-multiple-processes-single-dyno-with-foreman/
总之:设置你的Procfile来运行Foreman,这可以在多个进程之间分配你的dyno时间。还没有尝试过,但对于低流量或测试网站来说,这似乎是一种合法的方法。