python asyncio 多线程,python async await原理

  python asyncio 多线程,python async await原理

  了解python的异步:

  1.IO复用也是协议背后的技术,Nginx和nodejs都充分利用了这一机制。

  2.为什么不能在FLASK线程中直接使用标准库asyncio来支持异步?

  Asyncio必须有一个对应的eventloop,而且这个eventloop必须运行在主线程中,不能运行在子线程中,所以标准库asyncio不能直接用在Flask线程中。

  3.如果在单一并发的情况下web响应很慢,那么更改为异步模式不会提高“单一”请求的响应速度。当然,改成async一般是有意义的,因为并发小的时候响应很差,并发稍微大一点的时候,响应会急剧恶化,甚至在同步模式下无法响应。在异步模式下,从小并发到大并发,响应速度下降得非常慢。

  如何把Python的同步方法改写成异步?Python的异步方法大致可以分为三类:

  1.基于asyncio优化的特殊单线程异步方法。

  优点:这种方法使用简单,就像同步方法调用一样,并发性能很高。即使在大并发下,延迟也不会恶化。

  缺点:基于asyncio的类库很少,最著名的是aiohttp库,https://github.com/aio-libs.也有

  实现这样的方法有点困难。可以参考aio-libs下的一些类库。

  2.基于多线程(多进程)的适应性方法

  优点:这种方法简单易用,就像同步方法调用一样。另外,写这种方法也很简单。首先是同步方法,然后可以使用包装器将其转换为异步方法。

  缺点:性能差,主要是细节没有优化,整个方法运行完才会交出控制权。控制粒度太粗,多线程支持并发。

  3.传统的多线程(多进程)后台任务

  优点:如果不需要回调函数,这种方法非常简单,代码易于维护,并发性能好。

  缺点:要及时得到这个后台任务的结果,只能使用回调函数,代码变得难以维护。

  注:两个池,并流。期货。threadpooleuxecutor和并发。期货。processpoolexecutor,建议用于多线程(多进程)。

  了解Python异步

  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 . python library . 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-waw-it/

  例如,基于Asyncio的Aiohttp web框架适合restful api服务

  Aiohttp与烧瓶的比较

  https://stack abuse . com/asynchronous-python-for-web-development/

  https://stack abuse . com/asynchronous-vs-synchronous-python-performance-analysis/

  python中的一个重要模块——asyncio

  https://www.syncd.cn/article/asyncio_article_01

  https://www.syncd.cn/article/asyncio_article_02

  https://www.syncd.cn/article/asyncio_article_03

  您可以为合适的任务添加回调:

  task . add _ done _ callback(got _ result)#任务完成后,通知我们Django社区推广的ASGI规范和实现。

  ASGI服务器和框架

  https://asgi.readthedocs.io/en/latest/implementations.html

  类似Sanic的flask异步web框架

  Python黑魔法-异步IO( asyncio)协同

  https://www.jianshu.com/p/b5e347b3a17c

  asyncio中的未来实际上与并流中的未来是不一样的,

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

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: