Python 在Django下执行长时间运行的任务/批处理的健壮方法是什么?
我有一个Django应用程序,打算在局域网上的Virtualbox虚拟机上运行。基本用户将是精明的IT最终用户,而不是系统管理员 该应用程序的部分工作是连接到局域网上的外部数据库,对这些数据库运行一些python批处理,并将结果保存在其本地数据库中。然后,用户可以使用Django页面浏览系统 批处理的运行时间并没有那么长,但可以运行到分钟,可能是几十分钟,而不是几秒钟。运行频率充其量是很少的,我想你可以花上几天不需要刷新 这不是芹菜的长任务的正常用例,长任务最终会通过ajax和/或轮询将结果推回到web UI中。它更类似于开发人员偶尔使用django管理命令,但这次是针对最终用户的 用户应该能够在需要时启动一个或多个批的运行,以便刷新给定外部数据库的计算(目标数据库是批的一个参数) 在为给定的数据库完成批处理之前,该应用程序实际上是不可用的。您可以访问它的页面,但许多功能将不可用 从支持的角度来看,批始终保持轻松运行是非常重要的。下载到VMs SSH可能需要频繁的握手,这并不好——最好从Django网页启动它们 我目前拥有的: 每个批都有自己的脚本Python 在Django下执行长时间运行的任务/批处理的健壮方法是什么?,python,django,batch-processing,Python,Django,Batch Processing,我有一个Django应用程序,打算在局域网上的Virtualbox虚拟机上运行。基本用户将是精明的IT最终用户,而不是系统管理员 该应用程序的部分工作是连接到局域网上的外部数据库,对这些数据库运行一些python批处理,并将结果保存在其本地数据库中。然后,用户可以使用Django页面浏览系统 批处理的运行时间并没有那么长,但可以运行到分钟,可能是几十分钟,而不是几秒钟。运行频率充其量是很少的,我想你可以花上几天不需要刷新 这不是芹菜的长任务的正常用例,长任务最终会通过ajax和/或轮询将结果推回
nginx、wsgi、virtualbox上的ubuntu、构建VMs的厨师。我不确定芹菜配置如何使其不稳定,但听起来它仍然最适合解决您的问题。我使用
redis
作为队列系统,根据我自己的经验,它比rabbitmq
工作得更好。也许你可以试试看它是否能改善情况
否则,只需使用
cron
作为驱动程序来运行定期任务。您可以让它定期运行脚本并更新数据库,您的UI组件将轮询数据库而不会发生冲突。cron无法工作,因为用户需要能够决定何时运行。但如果不是这样,那么cron就可以了——它是我需要的启动器,比任务和队列系统更重要。但我会检查redis,而不是rabbitmq,看看这是否有区别。我想我担心的是:rabbitmq+celery+celerycam+my batches意味着比我的批次更多的东西可能出错。我想补充一点,对于我的用例,芹菜堆栈自从切换到redis以来已经更加稳固。另外一个好处是,我还可以将redis用于Django缓存。所以txs再次提出建议。