Я пытаюсь создать службу загрузки файлов с помощью Tornado.Загрузка файла торнадо
Но я заметил, что, когда несколько пользователей загружают файлы, торнадо ждет завершения первого и следующего процесса.
Каков правильный способ загрузки файлов ASYNC на Tornado?
Мой пост:
@tornado.web.asynchronous
def post(self):
list_of_img = ['png','jpg','jpeg','gif']
list_of_files = ['rtf','txt','ppt','pptx','doc','docx','pdf','xls','xlsx','rar','zip','tgz','bz','gz','tar','bz2','3gp','mp4','m15','avi','mp3']
path = __UPLOADS__
try:
fileinfo = self.request.files['file'][0]
filebody = fileinfo['body']
filename = fileinfo['filename']
filetype = fileinfo['content_type']
extn = os.path.splitext(filename)[1]
n_filename = str(uuid.uuid4()) + extn
# rcv file
print "saving", n_filename + "..."
output_file = open(n_filename, 'w')
output_file.write(filebody)
# upload to s3
print "uploading", n_filename + "..."
self.upload(path, n_filename)
# clean up
print "cleaning", n_filename + "..."
self.delete_local(n_filename)
self.finish(n_filename)
except KeyError, key:
delete = self.get_argument("delete", None, True)
if delete:
filename = self.get_argument("filename", None, True)
print "deleting", filename + "..."
self.delete(path, filename)
self.finish(filename)
Как это правильно сделано? – majidarif
Это большой вопрос. Вы должны идентифицировать все блокирующие части системы и заменить их неблокирующими эквивалентами. Обычно это означает, что вы не можете использовать какие-либо сетевые библиотеки, кроме тех, которые предназначены для использования асинхронно. Здесь нет бесплатного обеда; изменение интерфейса - это то, что значит быть асинхронным. –
серьезно. Это обычная проблема и не может найти лучший подход для обработки загрузки файла aync. BTW, полезно найти несколько вопросов, прежде чем писать свое приложение на торнадо. –