izoabr
2014-10-04 11:49:42 +08:00
比如get /do/anything,callback proc();
返回{percent:40,done:False}给前端
前端的proc()去显示进度条,判断done字段如果不是真就继续get /do/anything?proc=SESSIONID
anything这个view,先判断有没有给proc这个参数,有就检查这个ID有没有后台任务,有就去计算进度并返回,没有这个任务抛异常;如果没有proc这个参数,就抛个单独的线程出去干活,并返回1的percent。
或者你也可以用一个单独的deamon去负责处理任务,然后django跟他之间用一种方式通讯,比如查询任务是否存在、查询进度、查询结果之类的。这样的好处是这种耗时计算将来可以很轻松得就剥离到别的机器上去干活。
如果更好一点,我就让这个deamon跟django之间用MQ通讯,那样我日后还可以把deamon横向拓展,开新deamon,加入到worker队列,就自己去分担负载了。
如果是deamon+MQ的方式还可以做成主动汇报进度,执行过程中遇到节点或者定期得通过MQ发送进度信息,django收到之后给前端反馈过去,前端callback出来就行。