web网站包含前端和后端, 异步处理可以用在前端, 也可以用在后端.  前端 jquery 进行 ajax 请求时, 可设置 async 属性为 true, 并为 success 设置一个 callback 函数, 在服务端返回之前, 浏览器可以执行 ajax 之后的代码, 当服务器端返回后, jquery会执行 success 回调.

后端的视图函数也可以引入这种异步处理机制,  发扬广大的是nodejs了, nodejs web服务单线程异步处理方式, 一般来讲, nodejs 框架的并发性要比Django/Flask 要好, 主要原因是 Django/Flask 都是基于 WSGI 同步处理模式的, WSGI 采用多线程方式来支持并发, 和协程相比, 多线程资源消耗要大的多,  所以并发性要差一些.  当然如果我们的 Django/Flask web应用配合 Gunicorn(高性能的WSGI服务器) 和 nginx(高性能Web服务器) 部署, 并发也会有一定的改善.

为了改善 flask 的并发, flask 社区主要尝试了两个方向:
1. 尝试在 flask 中引入 async 机制,  比如 flask_aiohttp 项目,   在python 中 async 和 sync 编程分别属于两个世界, 所以整合起来难度和稳定性都成问题, 目前该方向已经被放弃.
2. 将耗时的视图交由 celery 作异步处理, 其他视图仍采用同步方式. celery 可以采用 redis 做 back end. 这个机制优缺点都很明显, 优点是, 在没有增加编码复杂度的情形下, 可以明显改善并发处理能力,  缺点是, 引入了两个 celery 和 redis 两个集群, 增加了部署和运维复杂度.

目前方向2应该是正解,  交由celery的异步视图函数, 和使用 async-await 的异步还有有一些差异的, 最主要的是使用异步 celery task的视图函数, 在触发task后返回到视图函数, 而调用async任务后, 视图函数并不会马上得到代码执行权, 直到async任务完成后, 才能得到代码执行权.

所以, 使用 celery 的异步api, 通常仅仅是触发后台任务, 通常还有一个配套的api, 用来查询后台任务的status.
详见: 
https://blog.miguelgrinberg.com/post/using-celery-with-flask
http://allynh.com/blog/flask-asynchronous-background-tasks-with-celery-and-redis/

windows 下的开发:
celery 采用 3.1.25 版本, 之后的 celery 不支持 window平台.
Redis-x64-3.0.504.msi 下载地址 https://github.com/MicrosoftArchive/redis/releases

Flask 异步化的更多相关文章

  1. EntityFramework 如何进行异步化(关键词:async·await·SaveChangesAsync·ToListAsync)

    应用程序为什么要异步化?关于这个原因就不多说了,至于现有项目中代码异步化改进,可以参考:实际案例:在现有代码中通过async/await实现并行 这篇博文内容针对的是,EntityFramework ...

  2. 走进异步世界:EnyimMemcached异步化改造引起的内存泄漏

    6月30日我们发布了异步化改造后的博客程序之后,出现了高内存.高CPU.高线程数的不理想情况. 经过一周的追查,终于水落日出——引起不理想情况的根源是我们修改过的EnyimMemcached代码存在内 ...

  3. [转]向facebook学习,通过协程实现mysql查询的异步化

    FROM : 通过协程实现mysql查询的异步化 前言 最近学习了赵海平的演讲,了解到facebook的mysql查询可以进行异步化,从而提高性能.由于facebook实现的比较早,他们不得不对php ...

  4. 异步化DAO的设计和实践

    目前,公司技术规划要求未来所有的服务要全面实现异步化接口,使得每个服务能达到1万/秒的单机性能.我们知道,在一个服务请求中,可能会调用其他服务,还会使用memcache.kv以及mysql等.目前,大 ...

  5. 商品详情页系统的Servlet3异步化实践

    http://jinnianshilongnian.iteye.com/blog/2245925 博客分类: 架构   在京东工作的这一年多时间里,我在整个商品详情页系统(后端数据源)及商品详情页统一 ...

  6. Dubbo 2.7新特性之异步化改造

    这是why技术的第1篇原创文章 我与Dubbo的二三事 我是2016年毕业的,在我毕业之前,我在学校里面学到的框架都是SSH,即struts+spring+hibernate,是的你没有看错,在大学里 ...

  7. flask 异步发送邮件

    异步发送邮件 当使用SMTP的方式发送电子邮件时,如果你手动使用浏览器测试程序的注册功能,在提交注册表单后,浏览器会有几秒钟的不响应.因为这时候程序正在发送电子邮件,发信的操作阻断了请求--响应循环, ...

  8. Flask页面模板化代码片段

    文中展示了Flask官网的Tutorial示例中用到的模板化代码片段,以备查阅. base.html: {% block title %}{% endblock %} {% if g.user %} ...

  9. flask 异步celery使用

    在开发过程中,耗时长,超时的任务经常发生,比如:获取后端某个大文件数据超时.需要后端计算任务超时,等等, 此时我们就会很自然的想到异步方式,根据需要完成的任务创建一个task_id, 由前端来监听该任 ...

随机推荐

  1. 自学_数据库<三>

    数据库 数据库概述 DBMS(DataBase Management System,数据库管理系统)和数据库.平时谈到"数据库"可能有两种含义:MSSQLServer.Oracle ...

  2. JQuery Deferred对象使用小结

    场景描述 如下,打开页面时,获取默认选中的项目,同时也会初始化Combobox下拉框下拉列表数据 问题描述 获取默认选中项目及下拉列表的js函数位于common.js文件,类似如下: // 根据项目类 ...

  3. Linux相关集合

    本篇概述 Linux xshell6 连接 Hadoop 启动关闭 Linux xshell6 连接相关问题 首先,虚拟机 得先能通成网(具体教程可百度) 然后,进行 本机 ip 的查询(xshell ...

  4. Prometheus Grafana快速搭建

    Prometheus Prometheus和Grafana组合基本上是监控系统的标配.Prometheus做存储后端,Grafana做分析及可视化界面. 普罗米修斯是开源的系统监控/报警工具库,功能非 ...

  5. 迁移到MAC

    周末折腾了2天环境,主要是从windows迁移到mac上,提升逼格告别山寨,迈向专业化.首先,终于把pomelo的c客户端在xcode上跑起来了,至此已基本解决了网络连接问题.由于是第一次用mac开发 ...

  6. 前端如何快速定位问题传参 和false

    今天下午在请求接口的时候,出现了一个问题就是  传参问题 接口是请求成功的200,但是修改后返回来的却是500,这就很纳闷怎么会这样了. 经过查找,原来是因为传参问题.将有一个name:0 传递成了n ...

  7. 利用Python几行代码批量生成验证码

    几行代码批量生成authCode 整体步骤: 1.创建图片 2.创建画笔 3.在图片上生成点 4.在图片上画线 5.在图片在画圆 6.在图片在写文本 7.在图片在生成指定字体的文本 代码奉上 #!/u ...

  8. Codeforces Round #597 (Div. 2) E. Hyakugoku and Ladders 概率dp

    E. Hyakugoku and Ladders Hyakugoku has just retired from being the resident deity of the South Black ...

  9. linux常用命令指南——查找文件我最强:find

    2.3.2 查找文件我最强:find 2.3.2.1 find查找常用命令示例 find / -name 'wfy.txt' # 从根目录下开始查找文件wfy.txt find . -name '*f ...

  10. TypeScript + Webpack 4 开发环境搭建(转)

    前段时间接触到 Microsoft 的 Microsoft.AspNetCore.SpaTemplates 模板,生成的项目使用的默认语言是 TypeScript,虽然以前在此之前并没有用过TypeS ...