我有一个django项目,它有一个web界面,您可以上传文件,上传成功后,它会调用cli版本的软件来处理它,并在成功执行后返回结果
下面是我在views.py
中使用的一段代码片段
from cliproject.main import clirunner
# Some code for file upload and saving
clirunner()
这将运行命令行python脚本main.py
,该脚本位于cliproject/
目录中,它将执行一些操作并保存输出
问题是,整个过程在这一刻是同步的。因此,用户页面将在用户从UI上传文件之后加载,直到它在后台被pythoncli脚本处理为止。 流程如下
Django UI
| (User upload files)
views.py gets request and saves it somewhere
| (views run clirunner() to give python cli program control)
cliproject runs
| (After doing the stuff which is intended, it saves the output file)
views.py resumes
| (Reads the output file)
Django UI displays the output file
因此,我们可以在这里看到我调用不同CLI程序的问题视图.py去做我想做的事。但这是同步发生的。你知道吗
我需要的是使进程异步,我想显示一些东西作为加载条,以通知他们cli程序正在后端执行,并且它的状态为。 CLI程序执行完毕后,加载条将达到100%,DjangoUI将异步显示输出
我试过芹菜。但是我不知道如何使这个加载条基于pythoncli脚本工作。有什么想法吗?你知道吗
我有个想法,你需要:
A)异步启动任务
B)能够获得其当前状态的值。你知道吗
有个主意:
1)使任务成为管理.py可以使用线程或芹菜任务调用调用的命令。你知道吗
2)当任务执行时,让它使用Django模型将其当前完成状态写入您选择的数据库。(以上步骤旨在简化DB的使用。如果需要的话,你可以直接写。)
3)将任务id(由您分配或Celery在索引的db列上生成)传递到模板上下文,并使用AJAX调用ping一个视图,该视图返回数据库查找的完成百分比,然后从那里设置完成。你知道吗
这样,您的视图提交并启动任务,它负责标记自己的工作,然后另一个视图只进行一个快速的db查询以找出它在哪里。你知道吗
编辑为添加:您还可以使用
cache
后端并写入memcached、redis等中的键,以避免对关系数据库执行ping操作。你知道吗相关问题 更多 >
编程相关推荐