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. android 文件File删除问题2. angular.js - 怎样在使用ng-repeat属性的标签里面监听单个事件,使其能够单个改变CSS。3. css - transform: translateY(-50%)在360浏览器极速模式下使得文字变模糊了4. python - 关于matplotlib的x轴显示的问题5. css - .clearfix:after中为什么设置display: table6. nginx英文文档的WebSocket proxying部分没看太明白,麻烦推荐一点中文文章7. mac连接阿里云docker集群,已经卡了2天了,求问?8. mysql优化 - mysql慢查询copying to tmp table9. mysql多个数据总结成一条数据10. python - django 按日归档统计订单求解
