gpt4 book ai didi

python - uwsgi --reload 拒绝传入连接

转载 作者:可可西里 更新时间:2023-11-01 02:43:26 27 4
gpt4 key购买 nike

我正在尝试设置一个 uwsgi 托管的应用程序,以便我可以使用 uwsgi --reload 进行优雅的重新加载,但我显然失败了。这是我的测试 uwsgi 设置:

[admin2-prod]
http = 127.0.0.1:9090
pyargv = $* --db=prod --base-path=/admin/
max-requests = 3
listen=1000
http-keepalive = 1
pidfile2 =admin.pid
add-header=Connection: keep-alive
workers = 1
master = true
chdir = .
plugins = python,http,router_static,router_uwsgi,router_http
buffer-size = 8192
pythonpath = admin2
file = admin2/app.py
static-map=/admin/static/=admin2/static/
static-map=/admin/v3/build/=admin2/client/build/
disable-logging = false
http-timeout = 100

(请注意,我之前运行了 sysctl net.core.somaxconn=1000)

这是我的测试 python 脚本:

import httplib

connection = httplib.HTTPConnection('127.0.0.1', 9090)
connection.connect()

for i in range(0, 1000):
print 'sending... ', i
try:
connection.request('GET', '/x', '', {'Connection' : ' keep-alive'})
response = connection.getresponse()
d = response.read()
print ' ', response.status
except:
connection = httplib.HTTPConnection('127.0.0.1', 9090)
connection.connect()

上述客户端在 --reload 期间失败:

sending...  920
Traceback (most recent call last):
File "./test.py", line 15, in <module>
connection.connect()
File "/usr/lib64/python2.7/httplib.py", line 836, in connect
self.timeout, self.source_address)
File "/usr/lib64/python2.7/socket.py", line 575, in create_connection
raise err
socket.error: [Errno 111] Connection refused

从 tcpdump 看来,uwsgi 确实在接受第二个传入的 TCP 请求,该请求发生在 --reload 时,客户端正在发送 GET,服务器正在 TCP 确认它,但连接最终由服务器 RST 之前发回 HTTP 响应。那么,我缺少什么才能让服务器对这个传入连接进行排队,直到它准备好处理它并获得真正优雅的重新加载?

最佳答案

您在同一个 uWSGI 实例中同时管理应用程序和代理,因此当您重新加载堆栈时,您也在杀死前端 Web 服务器(您以 'http' 选项启动的服务器)。

你必须在另一个 uWSGI 实例中拆分 http 路由器,或者使用 nginx/haproxy 或类似的。一旦您拥有两个不同的堆栈,您就可以在不关闭套接字的情况下重新加载应用程序

关于python - uwsgi --reload 拒绝传入连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38349603/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com