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. java固定键值转换,使用枚举实现字典?2. javascript - 移动端开发 H5 页面在 iOS手机上无法实现 长按复制文本 求解决3. 如何解决tp6在zend中无代码提示4. java - HTTPS双向认证基础上有无必要再进行加签验签?5. python - flask学习,user_syy添加报role is invalid keyword for User.6. vim - win10无法打开markdown编辑器7. java - 读写锁中 写锁的降级问题8. javascript - 有没有类似高铁管家的时间选择插件9. html - 如何使用用户输入的数据去运行一个数学公式,最后怎么返回。10. css - BEM 中块(Block)有木有什么标准 何时决定一个部分提取为块而不是其父级的元素呢(Element)?~
