在Django和Heroku中调度更新功能?

时间:2012-09-30 20:11:11

标签: python django heroku celery

我正在开发一个项目,将部署在Django的Heroku上,该项目有大约12个更新功能。每个运行大约需要15分钟。我们称之为update1(),update2()... update10()。

我正在Heroku上部署一个工作器dyno,我想一次运行其中的一个或多个(它们不是真正的计算密集型,它们都是HTML解析器,但数据是时间敏感的,所以我希望尽可能多地调用它们。)

我已经阅读了很多Celery和APScheduler文档,但我不确定哪个对我最好/最简单。如果时间彼此重叠,那么计划任务会同时运行(即,如果我每2分钟运行一次,每3分钟运行一次,还是等到每一次完成?)

任何方式我都可以排队这些功能,所以至少有一些功能一次运行?建议使用此用例的同时呼叫数量是多少?

1 个答案:

答案 0 :(得分:0)

基于您的用例描述,您不需要调度程序,因此APScheduler将无法很好地满足您的要求。

除了你的工作人员dyno,你有网络dyno吗?此类处理的常用设计模式是设置接受请求的控制线程或控制进程(您的Web dyno)。然后将这些请求放在请求队列中。

此队列由一个或多个工作线程或工作进程(您的工作人员dyno)读取。我没有和Celery合作过,但看起来很符合你的要求。根据您的描述,很难确定您需要多少工作线程或工作线程。您还需要指定每秒需要处理的更新请求数。此外,您还需要指定请求是CPU绑定还是IO绑定。