【发布时间】:2014-01-31 17:47:10
【问题描述】:
使用 gevent 后端服务器运行烧瓶应用程序并利用所有处理器内核的明确方法是什么?我有想法运行烧瓶应用程序的多个副本,其中 gevent WSGIServer 侦听 diapason 5000..5003 中的一个端口(用于 4 个进程)和 nginx 作为负载平衡器。
但我不确定这种方式是不是最好的,可能还有其他方法可以做到这一点。例如,主进程监听一个端口,工作进程处理传入的连接。
【问题讨论】:
使用 gevent 后端服务器运行烧瓶应用程序并利用所有处理器内核的明确方法是什么?我有想法运行烧瓶应用程序的多个副本,其中 gevent WSGIServer 侦听 diapason 5000..5003 中的一个端口(用于 4 个进程)和 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()
好的,我知道你说过你想使用 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;
}
祝你好运!
【讨论】: