zoukankan      html  css  js  c++  java
  • Flask+gevent 异步 WEB 架构

    异步 WEB 架构的特点:

    gevent 为 Python 提供了比较完善的协程支持,其基于 greenlet 实现协程。
    当 greenlet 遇到如网络访问、磁盘 IO 等操作时,就将自动切换至其他的 greenlet,待操作完成后,在适合的时间点回切 greenlet 继续执行。由于网络访问、磁盘 IO 等操作耗时较长,且实际 CPU 使用率较低(大部分工作由 DMA 等设备完成)。所以倘若非异步,涉及以上操作并发将以顺序执行, CPU 长期处于空闲状态。而异步模式将能实现并发程序间的切换,从而保证 CPU 有较高的利用率,而不是等待如网络访问、磁盘 IO 等操作。 
    注意:gevent 的使用并不能减少实际 CPU 的使用量,所以若程序的执行过程消耗的全为 CPU 资源,则其异步也是毫无意义的。
     
    Flask+gevent 的最小程序实例:
    最小程序实例如下。
    from gevent import monkey
    monkey.patch_all()
    from flask import Flask
    from gevent import pywsgi
                                           
    app = Flask(__name__)
                                           
    @app.route('/')
    def index():
        return 'Hello World'
                                       
    server = pywsgi.WSGIServer(('127.0.0.1', 5000), app)
    server.serve_forever()
    注意:为实现 Flask 与 gevent 的结合,需在程序开头引入 monkey patch。monkey patch 将以闭包的形式修改可以实现异步的标准库,从而实现异步。
    注意:需使用支持 gevent 的 WSGI,例如:gevent.pywsgi、gunicorn 等。
  • 相关阅读:
    Binder机制,从Java到C (5. IBinder对象传递形式)
    Binder机制,从Java到C (4. Parcel)
    Binder机制,从Java到C (3. ServiceManager in Java)
    Binder机制,从Java到C (2. IPC in System Service :AMS)
    Binder机制,从Java到C (10. Binder驱动)
    Binder机制,从Java到C (8. ServiceManager in Native)
    Binder机制,从Java到C (7. Native Service)
    Binder机制,从Java到C (6. Binder in Native : libbinder)
    Binder机制,从Java到C (1. IPC in Application Remote Service)
    SVM详解
  • 原文地址:https://www.cnblogs.com/autopenguin/p/6497194.html
Copyright © 2011-2022 走看看