2017-01-14 10 views
3

Каков наилучший способ для переноса больших файлов асинхронно в флягу? Я прочитал это . Но я хочу знать, есть ли способ сделать это без использования сельдерея.Передача больших файлов асинхронно в фляге

Заранее спасибо

+1

Перевести, где? От клиента? К клиенту? На другой сервер? – dirn

+0

@dirnОт клиента к серверу – TheNone

+0

Флажок - это синхронный фрейм, вы можете попробовать flask + gevent и потоковые ответы, как описано здесь: http://flask.pocoo.org/docs/0.12/patterns/streaming/ – danigosa

ответ

1

Колбы является синхронной рамкой, вы можете попробовать флягу + GEvent и потоковые ответы, как описано здесь: http://flask.pocoo.org/docs/0.12/patterns/streaming/.

В любом случае, если вы хотите правильно загрузить очень большие файлы, я предлагаю вам использовать другой подход. Вместо того, чтобы пытаться выполнить асинхронную работу с синхронной картой, попробуйте делегировать передачу с помощью Nginx upload_module, как описано здесь: http://blog.thisisfeifan.com/2013/03/nginx-upload-module-vs-flask.html

Nginx работает быстрее и не загружает файлы в памяти, это обычные фреймворки, такие как Flask или Django даже в асинхронном режиме. Не забудьте настроить колбу для получения после загрузки POST с директивой upload_pass. Единственное ограничение в том, что вы будете иметь, чтобы узнать, как собрать полный оперять Nginx от источника, здесь пример рабочего Dockerfile:

FROM buildpack-deps:jessie 

##### NGINX ##### 
# Base Stuff 
RUN apt-get update && apt-get install -y -qq \ 
    libssl-dev 

# Nginx with upload_module and upload_progress_module 
# "Stable version". 
ENV ZLIB_VERSION 1.2.11 
ENV PCRE_VERSION 8.39 
ENV NGX_UPLOAD_MODULE_VERSION 2.2 
ENV NGX_UPLOAD_PROGRESS_VERSION 0.9.1 
ENV NGX_HEADERS_MORE_VERSION 0.32 
ENV NGX_SPPEDPAGE_VERSION 1.11.33.4 
ENV NGINX_VERSION 1.11.8 

RUN cd /tmp \ 
    && wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz \ 
    && tar xvf nginx-${NGINX_VERSION}.tar.gz \ 
    && wget https://github.com/openresty/headers-more-nginx-module/archive/v${NGX_HEADERS_MORE_VERSION}.tar.gz \ 
    && tar -xzvf v${NGX_HEADERS_MORE_VERSION}.tar.gz \ 
    && wget https://github.com/pagespeed/ngx_pagespeed/archive/latest-stable.tar.gz \ 
    && tar -xzvf latest-stable.tar.gz \ 
    && wget https://dl.google.com/dl/page-speed/psol/${NGX_SPPEDPAGE_VERSION}.tar.gz \ 
    && tar -xzvf ${NGX_SPPEDPAGE_VERSION}.tar.gz \ 
    && mv psol ngx_pagespeed-latest-stable/ \ 
    && git clone -b ${NGX_UPLOAD_MODULE_VERSION} https://github.com/Austinb/nginx-upload-module \ 
    && wget http://zlib.net/zlib-${ZLIB_VERSION}.tar.gz \ 
    && tar xvf zlib-${ZLIB_VERSION}.tar.gz \ 
    && wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-${PCRE_VERSION}.tar.bz2 \ 
    && tar -xjf pcre-${PCRE_VERSION}.tar.bz2 \ 
    && wget https://github.com/masterzen/nginx-upload-progress-module/archive/v${NGX_UPLOAD_PROGRESS_VERSION}.tar.gz \ 
    && tar xvf v${NGX_UPLOAD_PROGRESS_VERSION}.tar.gz \ 
    && cd nginx-${NGINX_VERSION} \ 
    && ./configure \ 
    --with-pcre=../pcre-${PCRE_VERSION}/ \ 
    --with-zlib=../zlib-${ZLIB_VERSION}/ \ 
    --add-module=../nginx-upload-module \ 
    --add-module=../nginx-upload-progress-module-${NGX_UPLOAD_PROGRESS_VERSION} \ 
    --add-module=../ngx_pagespeed-latest-stable \ 
    --add-module=../headers-more-nginx-module-${NGX_HEADERS_MORE_VERSION} \ 
    --with-select_module \ 
    --with-poll_module \ 
    --with-file-aio \ 
    --with-http_ssl_module \ 
    --with-ipv6 \ 
    --with-pcre-jit \ 
    --with-http_gzip_static_module \ 
    --with-http_ssl_module \ 
    --with-http_v2_module \ 
    --with-http_realip_module \ 
    --user=nginx --group=nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --with-cpu-opt=CPU -- with-ld-opt="-Wl,-E" \ 
    && make \ 
    && make install 

EXPOSE 80 443 

CMD ["nginx", "-g", "daemon off;"] 

Примечание: Пожалуйста, в этом изображении не хватает предоставление nginx.conf и default.conf.