【问题标题】:Flask with gevent multicore带有 gevent 多核的烧瓶
【发布时间】:2014-01-31 17:47:10
【问题描述】:

使用 gevent 后端服务器运行烧瓶应用程序并利用所有处理器内核的明确方法是什么?我有想法运行烧瓶应用程序的多个副本,其中 gevent WSGIServer 侦听 diapason 5000..5003 中的一个端口(用于 4 个进程)和 nginx 作为负载平衡器。

但我不确定这种方式是不是最好的,可能还有其他方法可以做到这一点。例如,主进程监听一个端口,工作进程处理传入的连接。

【问题讨论】:

    标签: python nginx flask


    【解决方案1】:

    我会拍的!

    Nginx!

    服务器部分:

    location / {
        include proxy_params;
        proxy_pass http://127.0.0.1:5000;
    }
    

    烧瓶应用

    这是一个简单的烧瓶应用程序,我将在此示例中使用它。

    myapp.py:

    from flask import Flask
    app = Flask(__name__)
    
    @app.route("/")
    def hello():
        return "Hello World!"
    
    if __name__ == "__main__":
        app.run()
    

    uWSGI

    好的,我知道你说过你想使用 gevent,但如果你愿意在这方面做出一点妥协,我想你会对这个设置感到非常满意。

    [uwsgi]
        master = true
        plugin = python
        http-socket = 127.0.0.1:5000
        workers = 4
        wsgi-file = myapp.py
        callable = app
    

    独角兽

    如果你必须有 gevent,你可能会喜欢这个小设置

    config.py:

    import multiprocessing
    
    workers = multiprocessing.cpu_count()
    bind = "127.0.0.1:5000"
    worker_class = 'gevent'
    worker_connections = 30
    

    然后就可以运行了:

    gunicorn -c config.py myapp:app
    

    没错,每个 cpu 都有一个 worker,每个 worker 有 30 个连接。

    看看这是否适合你。

    如果您真的喜欢使用 nginx 作为负载均衡器,请在您的 http 部分尝试类似的操作

    upstream backend {
        server 127.0.0.1:5000;
        server 127.0.0.1:5002;
        server 127.0.0.1:5003;
        server 127.0.0.1:5004;
    } 
    

    然后是服务器部分中的一个

    location / {
        include proxy_params;
        proxy_pass http://backend;
    }
    

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2020-11-23
      • 2021-05-17
      • 2013-08-19
      • 2020-08-05
      • 2012-12-27
      • 1970-01-01
      • 1970-01-01
      • 2013-07-26
      • 1970-01-01
      相关资源
      最近更新 更多