Web应用程序在ssl.py中在self._sslobj.do_handshake()上挂了几个小时。
浏览了StackOverflow的Python部分之后,我发现了一些可能无法解决导致该问题的核心问题的方法,但是绝对足以应付出现该问题的任何情况。以下问题具有各种解决方案,如果函数花费太长时间才能完成,则会抛出某种异常。这就是我最终解决此问题的方式。最佳答案是仅UNIX,但是还有其他一些使用线程并在每个平台上都可以使用的工具:
超时功能(如果完成时间太长)
这是一个奇怪的问题,实际上很难复制。在成千上万的API调用之后,我只见过两次。我认为,有人会找到比这更好的解决方案的可能性很小,这虽然有点可笑,但绝对可以解决问题。您可以引发异常,然后再次尝试SSL连接,或者继续执行程序的另一部分。
我认为目前的答案就足够了,但是如果有人有更好的选择,请随时提出。老实说,似乎唯一解决此问题的方法可能是实际ssl.py库中的错误修复,但我无法肯定地说。
解决方法我正在使用Python2.7.5。我有一个网络应用程序,该应用程序每隔几分钟会查询API,并且在最后一天左右的时间内一直成功运行。但是,在将其放置几个小时后,我回来了,发现我的程序停顿了好几个小时都没有任何活动。我退出了该程序,发现在一天中的大部分时间里,在一次API调用期间,该程序都已停在ssl握手方法中。
这是回溯:
...File '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py',line 143,in __init__ self.do_handshake()File '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py',line 305,in do_handshake self._sslobj.do_handshake()
我做了一些研究,似乎这是Python 2.6中SSL库的问题,但此后已修复。我想知道为什么我的程序在不抛出异常或任何异常的情况下卡在这里。
如果有一种方法可以设置SSL握手方法的超时时间,那么我很乐意这样做,因为我希望避免我的程序被类似的事情无限期地停止。我正在使用RequestsHTTP库,如果有问题,它将在Mac OSX 10.9上运行。有什么建议吗?
编辑:我进行了一些研究,尽管2.6中实现了“修复”,但似乎其他人也遇到了SSL的特定问题。但是,尚不确定解决方案是什么。任何帮助表示赞赏。
编辑3: 添加我的解决方案作为对此问题的答案。
相关文章:
1. docker start -a dockername 老是卡住,什么情况?2. python运行后没有任何反馈要怎么排查3. java - 配置tomcat免安装版,无法启动 返回错误码44. java内存模型的happens-before语义顺序问题5. linux - 阿里云服务器(centos)中svn同步web目录的问题?6. 编程 - java 为什么没有静态方法接口,有没有哪门语言有静态方法接口。7. 从事游戏服务端开发(Java),需要具备哪些技术???8. web - nginx为什么上传了网页文件也无法访问?9. java - 判断数据在数据库中是否已存在.10. java - 并发操作下关于队列的疑问?
