关于Django app设计的新问题:
我为我的网站建立报告引擎.而且我的数据量很大(随着时间的推移而变得越来越大),并且必须应用一些算法.计算承诺对资源很重,如果它们是由用户的请求执行的话,那将是愚蠢的.因此,我认为将它们放入后台进程中,后台进程将不断地执行并不时返回结果,这可能是Django视图的例程,用于按需生成html输出.
我的问题是 – 建立这样的系统的适当设计方法是什么?有什么想法吗?
最佳答案 芹菜是您最好的选择之一.我们正在成功使用它.它具有强大的调度机制 – 您可以将任务计划为定时作业,也可以在用户(例如)请求任务时在后台触发任务.
它还提供了查询此类后台任务状态的方法,并具有许多流控制功能.它允许非常容易地分配工作 – 即您的芹菜后台任务可以在单独的机器上运行(这非常有用,例如,heroku web / workers split,其中web进程限制为每个请求最多30秒).它提供了各种队列后端(它可以使用数据库,rabbitMQ或许多其他排队机制.通过最简单的设置,它可以使用您的Django站点已经使用的相同数据库(这使得它易于设置).
如果您正在使用自动化测试,它还有一个有助于测试的功能 – 它可以设置为“急切”模式,后台任务不在后台执行 – 从而提供可预测的逻辑测试.