Mah*_*der 8 python exception gevent gunicorn python-requests
首先,版本:
我们最近升级了在gunicorn后面运行的服务器,以使用gevent异步工作程序而不仅仅是普通的同步工作程序.一切都很好,但我们现在遇到一个问题,试图通过http访问第三方服务,我只是不知道如何追踪可能是什么问题.
简短的堆栈跟踪如下所示:
File "/home/deploy/.virtualenvs/bapp/lib/python2.7/site-packages/requests/sessions.py", line 295, in post
return self.request('post', url, data=data, **kwargs)
File "/home/deploy/.virtualenvs/bapp/lib/python2.7/site-packages/requests/sessions.py", line 252, in request
r.send(prefetch=prefetch)
File "/home/deploy/.virtualenvs/bapp/lib/python2.7/site-packages/requests/models.py", line 625, in send
raise ConnectionError(sockerr)
ConnectionError: [Errno 66] unknown
Run Code Online (Sandbox Code Playgroud)
另一个不同的堆栈跟踪但我们认为它是同一个问题:
File "/home/deploy/.virtualenvs/bapp/lib/python2.7/site-packages/requests/packages/urllib3/connectionpool.py", line 94, in connect
sock = socket.create_connection((self.host, self.port), self.timeout)
File "/home/deploy/.virtualenvs/bapp/lib/python2.7/site-packages/gevent/socket.py", line 637, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
File "/home/deploy/.virtualenvs/bapp/lib/python2.7/site-packages/gevent/socket.py", line 769, in getaddrinfo
raise
DNSError: [Errno 66] unknown
Run Code Online (Sandbox Code Playgroud)
起初,我以为这可能是潜在的东西相关的libevent-dns,从这个谷歌集团的问题.我查了一下/etc/resolv.conf,并且只有一个DNS解析服务:
[me@host:~]$ cat /etc/resolv.conf
; generated by /sbin/dhclient-script
nameserver 10.3.0.2
Run Code Online (Sandbox Code Playgroud)
我查看了ERRNO66的内容:https://github.com/libevent/libevent/blob/master/include/event2/dns.h#L162,"/**发生未知错误*/".我没有太多运气找到那些有用的...就像它无法与dns服务器通话?
我认为它可能需要做些什么python-requests,看看如何启用请求异步模式?因为python-requests取决于urllib3,实施方式httplib; 但是,结果是今年早些时候在这个提交中gevent删除httplib补丁的作者没有任何关于原因的评论.
有没有人对如何调试此问题有任何想法,或者可能会对这里发生的事情有所了解?
提前致谢!
在关于freenode的一些对话之后,#gevent和#gunicorn频道似乎有了更多的见解:
patch_allwithhttplib=True@schmir引用:
"补丁httplib使用libevent http客户端库.我不相信libevent.如果你使用它,我的建议就是把它关掉"
<Damianz>你的平台是什么?我已经看到这个问题出现在Windows框中,它尝试ipv6并且生命失败..(我在CentOS 5上)<dmishe> 我在mac上看到类似的东西,看起来像gevent beta修复了它听起来像一般建议是放弃gevent v0.13.7并升级到gevent 1.0b.
如果能解决这个问题,我会跟进.与此同时,任何能够提出建议的人,我都非常感激.
看起来升级gevent已经解决了这个问题 - 我会添加我的答案并接受它,如果没有其他人插入,但只有一周后没有生产中的事件.