私はDjangoでこのような機能を持っています:
def uploaded_files(request):
global source
global password
global destination
username = request.user.username
log_id = request.user.id
b = File.objects.filter(users_id=log_id, flag='F') # Get the user id from session .delete() to use delete
source = 'sachet.adhikari@69.43.202.97:/home/sachet/my_files'
password = 'password'
destination = '/home/zurelsoft/my_files/'
a = Host.objects.all() #Lists hosts
command = subprocess.Popen(['sshpass', '-p', password, 'rsync', '--recursive', source],
stdout=subprocess.PIPE)
command = command.communicate()[0]
lines = (x.strip() for x in command.split('\n'))
remote = [x.split(None, 4)[-1] for x in lines if x]
base_name = [os.path.basename(ok) for ok in remote]
files_in_server = base_name[1:]
total_files = len(files_in_server)
info = subprocess.Popen(['sshpass', '-p', password, 'rsync', source, '--dry-run'],
stdout=subprocess.PIPE)
information = info.communicate()[0]
command = information.split()
filesize = command[1]
#st = int(os.path.getsize(filesize))
#filesize = size(filesize, system=alternative)
date = command[2]
users_b = User.objects.all()
return render_to_response('uploaded_files.html', {'files': b, 'username':username, 'host':a, 'files_server':files_in_server, 'file_size':filesize, 'date':date, 'total_files':total_files, 'list_users':users_b}, context_instance=RequestContext(request))
この関数の主な用途は、ファイルをサーバーからローカル マシンに転送し、データをデータベースに書き込むことです。欲しいもの:コピーに時間がかかる10GBの単一ファイルがあります。コピーはコマンド ラインで rsync を使用して行われるため、ファイルの転送中にユーザーが他のメニューを操作できるようにしたいと考えています。どうすればそれを達成できますか?たとえば、ユーザーが [OK] を押すと、コマンド ラインでファイルが転送されるので、ユーザーに「ファイルが転送されています」というメッセージを表示し、カーソルのローリングなどを停止しますか? この場合、マルチプロセッシングまたはスレッド化は適切ですか? ありがとう