理解 python 的 async:
1. 协程后面的技术也是 IO 多路复用, Nginx 和 nodejs 都充分利用了这种机制.
2. Flask 线程中为什么不能直接使用标准库 asyncio 来支持异步?
    asyncio 一定要有应该eventloop, 而这个 eventloop 必须运行在主线程, 不能运行在子线程中, 所以在Flask 线程中不能直接使用标准库 asyncio.
3. 如果在单并发的情况下, web响应很慢. 改成 async模式, 并不会改善"单次"请求响应速度.  当然改成 async 通常来讲还是有意义的, 因为小并发时候响应很差, 当并发量稍微增加时, 在同步模式下, 响应就会急剧变差, 甚至无法响应.  async 模式下, 从小并发到大并发, 响应速度下降非常缓慢.

如何将Python的同步方法改写异步? Python的异步方法大概可分三类:

1. 专门的基于 asyncio 优化的单线程异步方法
    优点: 这类方法使用简单, 就像同步方法调用一样, 并发性能很高, 即使是在大并发下, latency也不会变差.
    缺点: 基于 asyncio 的类库比较少, 最有名的是 aiohttp 库, https://github.com/aio-libs 还有一些.
    实现一个这样的方法, 有些难度, 可以参考 aio-libs 下的一些类库.
2. 基于多线程(多进程)的 awaitable 方法
   优点: 这类方法使用简单, 就像同步方法调用一样. 另外, 编写这类方法也非常简单, 先先一个同步方法, 然后利用一个 wrapper 就能转成异步方法.
   缺点: 性能较差, 主要是因为没有做过细节优化, 只有方法整体运行完毕后, 才会将控制权交出, 管控粒度太粗, 通过多线程来支持并发.
3. 传统的多线程(多进程)的后台任务
   优点: 如果不需要加上回调功能, 使用这种方法非常简单, 代码也容易维护, 并发性能也很好.
   缺点: 要及时获取这种后台任务的结果, 只能使用回调函数, 代码就变得难以维护.

说明:多线程(多进程)推荐使用 cocurrent.futures.ThreadPoolExecutor 和 cocurrent.futures.ProcessPoolExecutor 两个池.

理解Python Async
https://www.aeracode.org/2018/02/19/python-async-simplified/
https://stackabuse.com/overview-of-async-io-in-python-3-7/

https://pymotw.com/3/asyncio/index.html

https://www.blog.pythonlibrary.org/2016/07/26/python-3-an-intro-to-asyncio/

https://tryexceptpass.org/article/asyncio-in-37/

https://tryexceptpass.org/article/controlling-python-async-creep/

https://tryexceptpass.org/article/threaded-asynchronous-magic-and-how-to-wield-it/

基于 asyncio 的 Aiohttp web 框架, 比如适合作 restful api 服务

Aiohttp 和 Flask 的对比
https://stackabuse.com/asynchronous-python-for-web-development/
https://stackabuse.com/asynchronous-vs-synchronous-python-performance-analysis/

python中重要的模块--asyncio
https://www.cnblogs.com/zhaof/p/8490045.html
https://www.syncd.cn/article/asyncio_article_01
https://www.syncd.cn/article/asyncio_article_02
https://www.syncd.cn/article/asyncio_article_03

可以为 awaitable 的 Task 增加回调:

task.add_done_callback(got_result)         # task完成的时候通知我们

Django 社区推动的 ASGI 规范和实现
ASGI 服务器和框架
https://asgi.readthedocs.io/en/latest/implementations.html

Sanic  -类 flask 的异步web framework

Python黑魔法 --- 异步IO( asyncio) 协程
https://www.jianshu.com/p/b5e347b3a17c

asyncio 中的 future 其实和 cocurrent.futures 中的future 不是一回事,

https://stackoverflow.com/questions/49350346/how-to-wrap-custom-future-to-use-with-asyncio-in-python

最新文章

  1. 安装TFS(2015)工作组模式代理服务器(Agent)
  2. 在eclipse中安装上genymotion插件
  3. Oracle- 存储过程和异常捕捉
  4. cmd find命令
  5. 向大家推荐个android的游戏引擎——cocos2d-x
  6. CSS样式----盒子模型(图文详解)
  7. ztree 获取根节点
  8. VFS四大对象之一 struct super_block
  9. 在IIS上部署(托管).NET Core站点
  10. MFC全屏显示和多窗口动态显示的一些技巧和方法
  11. XSLT 创建CDATA节点
  12. ext中grid根据数据不同显示不同样式
  13. 论文笔记:Capsules for Object Segmentation
  14. Hydra密码破译工具
  15. IIS7中的站点、应用程序和虚拟目录详细介绍
  16. libevent终于编译通过了
  17. Java web 项目读取src或者tomcat下class文件夹下的xml文件或者properties文件
  18. pycharm使用技巧。(mac版本)
  19. ACM3018欧拉回路
  20. 生产消费者模式与python+redis实例运用(基础篇)

热门文章

  1. vue非父子关系之间通信传值
  2. PHP 7.0 7.3 (Unix) - 'gc' Disable Functions Bypass
  3. iOS中计算字符串NSString的高度
  4. 一文解读HTTP (转)
  5. python监控cpu 硬盘 内存
  6. Redis 通过 scan 找出不过期的 key
  7. request请求参数与http请求过程
  8. acwing 167. 木棒
  9. 剑指Offer-30.连续子数组的最大和(C++/Java)
  10. 【2019.8.15 慈溪模拟赛 T2】组合数(binom)(卢卡斯定理+高维前缀和)