3
A
回答
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。
相关问题
- 1. 在Flask中上传大文件
- 2. 如何异步上传大文件
- 3. 异步使用webclient传输文件
- 4. C#异步套接字文件传输
- 5. 异步分布式文件传输
- 6. 使用ASP.Net Framework 2.0异步传输大文件
- 7. 在C#.Net中使用HttpWebRequest的大文件异步上传
- 8. 角异步上传文件
- 9. IE8异步文件上传
- 10. 异步JQUERY文件上传
- 11. C#异步文件传输 - 在继续循环之前等待
- 12. flask send_grid异步电子邮件
- 13. 使用Flask-Security发送异步邮件
- 14. 异步数据传输CUDA
- 15. 异步运行Flask-Mail
- 16. TcpClient VS Socket在大文件传输中
- 17. 在Node.js中流式传输大文件
- 18. 在Flask中测试文件上传
- 19. 如何在Restful Flask中上传文件?
- 20. Flask-Mail - 基于Flask-Cookiecutter异步发送电子邮件
- 21. 上传一个大型Excel文件并异步处理
- 22. HTTP大文件传输
- 23. (400)为传输大文件
- 24. 传输大文件Python
- 25. Django大文件传输
- 26. Python - 从Flask的文件上传中获取文件对象的文件大小
- 27. 使用C++异步加载大文件
- 28. PHP - 异步提取大型ZIP文件
- 29. 异步读取文件 - 异步读取所有文件并查找最大值
- 30. 使用jQuery(MVC)异步流式传输文件系统文本文件
转移在哪里?从客户端?给客户?到另一台服务器? – dirn
@dirn从客户端到服务器 – TheNone
Flask是一个同步框架,您可以尝试flask + gevent和流式响应,如下所述:http://flask.pocoo.org/docs/0.12/patterns/streaming/ – danigosa