社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

如何在现有框架中使用asyncio?

RobberPhex • 10 年前 • 3818 次点击  

Python 3.4开始集成asyncio模块,但是我觉得它很难集成在现有框架中。

以Django为例,gevent可以直接给底层打patch来实现coroutine的功能。

反观asyncio,假设我在请求响应中调用同步IO函数,即使有一个库将这个同步函数替换成异步的,此时该coroutine需要让出CPU控制权,但是asyncio中只有yield from和return才能让出CPU控制权:

  • 如果通过yield from让出控制权,则会丧失向后兼容性;比如我写了yield from,PY2.X不认。还有,一般开发时采用同步IO函数,部署时替换为异步IO,同样需要兼容。
  • 至于通过return让出CPU控制权,那就只能等到该请求处理完了;也就是说,在请求处理过程中,即使该coroutine在处理IO,也不能把控制权让给别的coroutine。(在单线程、单进程,多coroutine的情况下)

另外,请各位讨论下通过将异步请求包装为Future对象,然后交给单独线程处理的方法(run_in_executor方法)的可行性。

若有理解不对的地方,请指出,谢谢!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/652
 
3818 次点击