我在Django芹菜中有这样的任务:
@task
def file(password, source12, destination):
subprocess.Popen(['sshpass', '-p', password, 'rsync', '-avz', '--info=progress2', source12, destination],
stderr=subprocess.PIPE, stdout=subprocess.PIPE).communicate()[0]
我有一个执行上述任务的函数:
@celery.task
@login_required(login_url='/login_backend/')
def sync(request):
#user_id = request.session['user_id']
"""Sync the files into the server with the progress bar"""
if request.method == 'POST':
choices = request.POST.getlist('choice')
for i in choices:
new_source = source +"/"+ i
#b = result.successful()
#result.get() #Poll the database to get the progress
start_date1 = datetime.datetime.utcnow().replace(tzinfo=utc)
source12 = new_source.replace(' ', '') #Remove whitespaces
file.delay(password, source12, destination)
return HttpResponseRedirect('/uploaded_files/')
else:
return HttpResponseRedirect('/uploaded_files/')
我想向用户显示带有进度的文件传输信息。我想显示正在传输的file name, remaining time and size of the file
。我怎么能这样做?
答案 0 :(得分:0)
这里有example如何通过芹菜本身传递信息。只需将上传过程作为AJAX调用启动,返回任务ID,然后由AJAX询问任务状态。
要真正了解自己的工作方式,您需要了解file
任务本身的进度。我怀疑你是否可以通过以其他方式调用子进程sshpass
然后解析PIPE
输出来实现这一点。
当你.delay
任务时,心灵芹菜已经为你产生了一个过程。
尝试以块的形式读取目标,rsync块,然后将文件合并到目标中。这样你就知道你已经转移了多少块。