在Django中,如何执行服务器端功能并监视客户端的进度

时间:2015-12-28 21:39:18

标签: python django

我问一个基本问题,所以我知道如何研究。

我有一个用于处理大文件的python脚本。它运行1-3分钟并有几个输出(标准输出)。

我想将此脚本集成到django中。如果我将其作为视图的一部分运行,它会停止等待结果的网页。我丢失了临时进度报告(即"已处理的X记录"或"已插入的Y记录")。

如何开始将脚本集成到网站中,以便我可以参与脚本,跟踪进度,并在实时"中显示进度和结果给用户?

感谢。

2 个答案:

答案 0 :(得分:2)

您可以在celery任务中运行您的脚本,这样您的网页就不会挂在那里。您需要找到一种方法来跟踪您的进度,使用数据库或在redis等内存存储中执行此操作。然后,您可以在进度视图中轮询进度,也可以编写一些javascript来更新进度页面中的进度。

celeryredis在django开发中非常常用。即使它没有直接设置,它仍然值得投入时间。

答案 1 :(得分:1)

这个问题有两个主要的主流解决方案。那些是Jobtasticchannels

前者,Jobtastic可能更成熟,因为它已经存在并且已经发展了一段时间。它使用Celery,如@ShangWang所建议的,以及一个jQuery插件,它定期轮询作业的当前状态。对于这类工作来说,这更像是一种“旧的”或“传统的”网络方式。

后者,频道,是一个更新的图书馆,仍在开发中。此库允许您使用WebSockets或类似技术,以便维护长期连接,您可以通过该连接将结果持续推送给最终用户。尽管它相对新颖且潜在的不成熟,但这可能是一个更合适的研究方向。 12月10日,Mozilla Open Source Support award was given to Django。此补助金为being used, in part, to integrate channels into Django coreAccording to Andrew Godwin,Channels(和Django核心提交者)的作者,该代码将针对“Django的下一个主要版本”,1.10。这意味着使用Channels可能会为将来版本中的核心Django功能提供一个干净的升级路径。