Python中的uWSGI请求超时

56
尝试在uWSGI中设置请求超时时间,但不确定正确的设置方式。似乎有多个超时选项(套接字、接口等),并不清楚应该配置哪个设置或在何处设置。
我要实现的行为是延长针对REST应用程序资源层的请求所需的时间。
3个回答

91

你可能正在寻找harakiri参数 - 如果请求超过指定的 harakiri 时间(以秒为单位),请求将被丢弃并相应的工作进程将被重新启动。

对于独立的uwsgi(ini配置):

[uwsgi]
http = 0.0.0.0:80
harakiri = 30
...

如果您在uwsgi之前使用了nginx代理,您还需要增加超时时间:
  location / {
    proxy_pass http://my_uwsgi_upstream;
    proxy_read_timeout 30s;
    proxy_send_timeout 30s;
  }

如果你出于某种奇怪的原因需要更高于60秒的超时时间,你可以考虑使用 uwsgi 协议进行通信。配置方式与nginx站点相似:

location / {
    uwsgi_read_timeout 120s;
    uwsgi_send_timeout 120s;
    uwsgi_pass  my_upstream;
    include     uwsgi_params;
}

uwsgi:

[uwsgi]
socket = 0.0.0.0:80
protocol = uwsgi
harakiri = 120
...

我使用了uwsgi协议选项,它起作用了。谢谢。 - lukik
1
一些查询或操作很容易需要超过60秒的时间,为什么会被认为是奇怪的? - AlxVallejo
因为大多数用户不想等待超过60秒。不要试图解释为什么你没有选择,我知道。 - Camusensei
我收到错误信息 NameError: name 'uwsgi' is not defined - Harry Moreno
结果发现我是将它添加到了systemd配置文件中,而不是Flask的.ini文件中。 - Harry Moreno
1
太棒了!我修改了 uwsgi_read_timeoutuwsgi_send_timeout。现在它对我起作用了! - Rufat

24

设置http-timeout对我有用。我有http = :8080,所以我认为如果您使用文件系统套接字,您必须使用socket-timeout


1
我能够通过在uwsgi配置中仅使用http-timeout参数来延长超时时间。我不需要--harakiri。(正如@Tombart上面所说,我还需要在nginx配置中设置proxy_read_timeoutproxy_send_timeout - nttaylor
如果我同时使用两个,会有任何问题吗?我遇到了一个问题:https://dev59.com/t2EKtIcB2Jgan1zn1vWY - DJ_Stuffy_K
在我的情况下,直接运行 uwsgi 时,问题也出在 --http-timeout 参数上。 - white_gecko

-2

我通过注释掉 #master = true 并添加以下内容, lazy-apps = true

到uwsgi.ini文件中,使其对我起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接