Python uWSGI在大请求期间引发OSError:写入错误

Python uWSGI在大请求期间引发OSError:写入错误,python,nginx,uwsgi,Python,Nginx,Uwsgi,我的应用程序使用nginx,服务器端使用uWSGI。当我执行一个大请求(响应时间>4s)时,会出现以下情况: SIGPIPE: writing to a closed pipe/socket/fd (probably the client disconnected) on request _URL_ (ip XX.XX.XX.XX) !!! uwsgi_response_writev_headers_and_body_do(): Broken pipe [core/writer

我的应用程序使用nginx,服务器端使用uWSGI。当我执行一个大请求(响应时间>4s)时,会出现以下情况:

SIGPIPE: writing to a closed pipe/socket/fd (probably the client
    disconnected) on request _URL_ (ip XX.XX.XX.XX) !!!

uwsgi_response_writev_headers_and_body_do(): Broken pipe
    [core/writer.c line 287] during GET _URL_ (XX.XX.XX.XX)

OSError: write error
似乎uWSGI试图在流中写入,但该流已被关闭。 当我检查nginx日志(error.log)时:

当然,我的客户端(REST客户端或浏览器)收到502错误

我总是在~4s之后出现此错误

然而,我不知道如何防止这个问题。 我试图在我的nginx配置文件中设置一些参数:

location my_api_url {
    [...]
    uwsgi_buffer_size 32k;
    uwsgi_buffers 8 32k;
    uwsgi_busy_buffers_size 32k;

    uwsgi_read_timeout 300;
    uwsgi_send_timeout 300;

    uwsgi_connect_timeout 60;
}
但问题仍然存在。 我还尝试在uWSGI配置文件(wsgi.ini)中设置这些参数:

在尝试优化响应时间之前,我希望这个问题有一个解决方案。我找不到一个在另一个岗位工作的人。我处理大量数据,因此在某些情况下,我的响应时间将在4-10秒之间

希望你能帮助我:)


事先非常感谢。

可能是这样,当你上传东西时,你使用了分块编码。 有uWSGI选项 , 默认情况下为4秒(即 设置为<代码>--套接字超时,即4秒)的值

虽然理论上问题可能出在其他地方,但我建议你们试试 上述选择。另外,恼人的例外是我有

ignore-sigpipe=true
ignore-write-errors=true
disable-write-exception=true
在我的uWSGI配置中(请注意,我提供了3个选项,而不是2个):

  • 忽略信号管道
    使uWSGI不显示信号管道错误
  • 忽略写入错误
    使其不显示错误 e、 g.
    uwsgi_响应_写入_头_和_体_do
  • 禁用写入异常
    防止
    OSError
    写入时生成

在我的例子中,Nginx作为uwsgi的backproxy,配置将服务器设置为在长时间运行的请求中正常等待

请注意,nginx代理声明中包含以下选项:

proxy_read_timeout 300s;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;

关于网关超时,我们什么也没做。

我在我的
uwsgi.ini
配置中添加了
[socket timeout=xxx]
,它起作用了。

你是在代理后面还是什么?当客户端抢先关闭连接时,通常会发生写入错误。谢谢!真的很有帮助的回答!请注意,根据uWSGI最新版本,应提供无参数的
忽略sigpipe
忽略写入错误
禁用写入异常
。看,我没有uwsgi.ini文件,我只是运行
uwsgi--socket 0.0.0.0:8000--protocol=http-w wsgi:application--enable threads-H/home/test/env--daemonize/home/test/test.log
。在这种情况下,如何设置套接字超时?要在命令行中添加此选项,只需添加
--socket timeout xxx
ignore-sigpipe=true
ignore-write-errors=true
disable-write-exception=true
proxy_read_timeout 300s;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;