2017-01-14 58 views
3

在Flask中异步传输大文件的最佳方法是什么?我已阅读此。但我想知道是否有一种方法可以在不使用芹菜的情况下做到这一点。在Flask中异步传输大文件

在此先感谢

+1

转移在哪里?从客户端?给客户?到另一台服务器? – dirn

+0

@dirn从客户端到服务器 – TheNone

+0

Flask是一个同步框架,您可以尝试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委托传输,而不是尝试使用Nginx upload_module进行传输,如下所示:http://blog.thisisfeifan.com/2013/03/nginx-upload-module-vs-flask.html

Nginx更快,不会加载内存中的文件,这是Flask或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。