Django 进度条

4 投票
1 回答
12694 浏览
提问于 2025-04-17 14:08

我正在使用Django上传文件,并启动一个ETL任务,代码在

subprocess
里。

这个任务大约需要15秒才能完成。为了让用户不会觉得页面卡住,我想显示一个进度条

我能搞定用AJAX更新进度条的部分,但我不知道在子进程运行时怎么返回一个HttpResponse。也许使用线程可以解决这个问题?不过我在这方面没有经验。有人能给我一些建议吗?

这是视图的代码:

def start_job(request):
    if request.method == 'POST':
        form = UploadForm(request.POST, request.FILES)
        if form.is_valid() and form.is_multipart():
            save_file(form.cleaned_data['file'])
            subprocess.call(["Kitchen.bat", "/file:job.kjb"])
            return HttpResponseRedirect('/success/')
    else:
        form = UploadForm()
    return render_to_response('template.html')

1 个回答

2

谢谢@Bula,django-celery 是个很好的解决方案。

这里有一个不错的入门视频,可以帮助你开始学习。

撰写回答