使用gevent后端服务器运行flask应用程序并使用所有处理器核心的明确方法是什么?我有想法运行多个flask应用程序副本,其中gevent WSGIServer在diapason 5000..5003(4个进程)和nginx作为负载均衡器监听一个端口。
但我不确定这种方式是否最好,可能还有其他一些方法可以做到这一点。例如,主进程侦听一个端口,工作进程处理传入连接。
答案 0 :(得分:5)
我会开枪!
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()
好的,所以我知道你说你想要使用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上都有一名工人,每个工人有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;
}
好运好友!