uWSGI request timeout in Python
Asked Answered
H

2

56

Trying to set the timeout for requests in uWSGI, I'm not sure of the correct setting. There seem to be multiple timeout options (socket, interface, etc.) and it's not readily evident which setting to configure or where to set it.

The behavior I'm looking for is to extend the time a request to the resource layer of a REST application can take.

Henze answered 9/6, 2014 at 19:35 Comment(0)
A
93

You're propably looking for the harakiri parameter - if request takes longer than specified harakiri time (in seconds), the request will be dropped and the corresponding worker recycled.

For standalone uwsgi (ini config):

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

If you have nginx proxy before uwsgi you have to increase timeout as well:

  location / {
    proxy_pass http://my_uwsgi_upstream;
    proxy_read_timeout 30s;
    proxy_send_timeout 30s;
  }

If you want (for some strange reason) higher timeout than 60s, you might consider communication over uwsgi protocol. Configuration is quite similar nginx site:

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
...
Articular answered 29/8, 2014 at 17:32 Comment(6)
I used the uwsgi protocol option and it works. Thanks.Folse
Some queries or operations can easily take longer than 60s. Why would it be considered strange?Therese
Because most users won't want to wait >60 seconds. And don't try to explain why you don't have a choice, I know.Grau
I get error NameError: name 'uwsgi' is not definedDelightful
turns out I was adding that to a file for systemd config, not the .ini for flaskDelightful
Super! I changed uwsgi_read_timeout and uwsgi_send_timeout. And it works for me!Photophobia
I
24

Setting http-timeout worked for me. I have http = :8080, so I assume if you use file system socket, you have to use socket-timeout.

Iced answered 11/2, 2015 at 15:44 Comment(3)
I was able to extend the timeout by only using the http-timeout parameter in the uwsgi config. I didn't need --harakiri. (and I also needed to set proxy_read_timeout and proxy_send_timeout in the nginx config as @Articular said above)Perjury
will there be any issues if I used both ? I'm running into #67407946Selfidentity
In my case running uwsgi directly it was also the --http-timeout parameter.Depilatory

© 2022 - 2024 — McMap. All rights reserved.