与gevent multicore的烧瓶

时间:2014-01-31 17:47:11

标签: python nginx flask

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

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

1 个答案:

答案 0 :(得分:5)

我会开枪!

的Nginx!

服务器部分:

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

Flask App

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

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

Gunicorn

如果你必须有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上都有一名工人,每个工人有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;
}

好运好友!