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 api 开发的端口怎么获取?2. 老师,flex-shrink: 1; 按视频操作,不会自动缩放3. node.js - 我是一个做前端的,求教如何学习vue,node等js引擎?4. docker网络端口映射,没有方便点的操作方法么?5. 如何解决docker宿主机无法访问容器中的服务?6. android glide asbitmap 在baseadpter中的问题7. docker镜像push报错8. css3 - 微信前端页面遇到的transition过渡动画的bug9. PHP中的$this代表当前的类还是方法?10. sublime-text - sublime text 3中编译python(sublimeREPL),如何仅运行单行/选定部分

网公网安备