我正在构建一个连接到后台 gRPC 服务的烧瓶服务器。我计划使用 gunicorn 来服务于烧瓶应用程序。添加 aflask_sockets.worker
会大大减慢它的速度!
这是一个最小的工作示例,
import grpc
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
data = b"Hello, World!\n"
channel = grpc.insecure_channel('{0}:{1}'.format('localhost', 40051))
try:
grpc.channel_ready_future(channel).result(timeout=1)
data += b"\nChannel ready"
except grpc.FutureTimeoutError:
data += b"\nChannel not ready"
return data
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)
如果我使用运行应用程序,
gunicorn -w 4 mwe:app -b :8000
一切似乎都很好。但如果我改为使用,
gunicorn -w 4 mwe:app -b :8000 -k flask_sockets.worker
该页面需要永远加载。我需要使用flash_sockets
一些额外的功能。最终我看到,
[CRITICAL] WORKER TIMEOUT (pid:17489)
[WARNING] Worker graceful timeout (pid:17489)
页面加载!我该如何解决这个问题?我的环境有,
Click==7.0
Flask==1.1.1
Flask-Sockets==0.2.1
gevent==1.4.0
gevent-websocket==0.10.1
greenlet==0.4.15
grpcio==1.23.0
gunicorn==19.9.0
itsdangerous==1.1.0
Jinja2==2.10.1
MarkupSafe==1.1.1
pkg-resources==0.0.0
six==1.12.0
Werkzeug==0.15.5