与gevent multicore的烧瓶

Dar*_*dra 0 python nginx flask

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

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

kzo*_*rro 5

我会开枪!

Nginx的!

服务器部分:

location / {
    include proxy_params;
    proxy_pass http://127.0.0.1:5000;
}
Run Code Online (Sandbox Code Playgroud)

烧瓶应用

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

myapp.py:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run()
Run Code Online (Sandbox Code Playgroud)

uWSGI

好的,所以我知道你说你想要使用gevent,但是如果你愿意在这方面做出妥协,我认为你会对这个设置非常满意.

[uwsgi]
    master = true
    plugin = python
    http-socket = 127.0.0.1:5000
    workers = 4
    wsgi-file = myapp.py
    callable = app
Run Code Online (Sandbox Code Playgroud)

Gunicorn

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

config.py:

import multiprocessing

workers = multiprocessing.cpu_count()
bind = "127.0.0.1:5000"
worker_class = 'gevent'
worker_connections = 30
Run Code Online (Sandbox Code Playgroud)

然后你可以运行:

gunicorn -c config.py myapp:app
Run Code Online (Sandbox Code Playgroud)

多数民众赞成你每个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;
} 
Run Code Online (Sandbox Code Playgroud)

然后在服务器部分中的其中一个

location / {
    include proxy_params;
    proxy_pass http://backend;
}
Run Code Online (Sandbox Code Playgroud)

祝好运好友!