【发布时间】:2015-04-17 14:15:36
【问题描述】:
我有一个spawns a new thread for each log entry 的 Python 日志处理程序,并且在新线程中,日志被发送到另一台服务器。但是,我发现请求间歇性地超时。如果我禁用处理程序,问题就会消失。
我尝试过其他 WSGI 服务器(WSGIUtils、WSGIRef),但无法重现此问题。
有什么想法吗?
我在 Debian 上运行 Gunicorn 19.3 和同步工作者和 Django 1.6。
【问题讨论】:
-
这是在请求周期内记录吗?您确定在等待将日志推送到套接字时没有阻塞线程吗?
-
我不确定新线程如何干扰 gunicorn,但为每个日志消息创建一个新线程非常昂贵。尝试创建一个队列和一个处理队列中日志条目的工作线程。然后日志系统的其余部分可以推入队列,这应该非常快。
-
@andrefsp:是的,线程中的函数很可能需要很长时间才能完成,但是为什么这会影响完成请求所需的时间?
-
@AaronDigulla 我同意它会更贵,但我们这样做是因为它需要更少的代码(与拥有队列相比)并且性能税在测试中并不重要。但是,这怎么会导致工作人员响应请求的时间过长?