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不顯示端口映射呢?2. java - 請問在main方法中寫成對象名.屬性()并賦值,與直接參參數賦值輸錯誤是什么原因?3. MySQL數據庫中文亂碼的原因4. docker - 各位電腦上有多少個容器啊?容器一多,自己都搞混了,咋辦呢?5. macos - mac下docker如何設置代理6. android studio總是在processes running好久7. 關docker hub上有些鏡像的tag被標記““This image has vulnerabilities””8. mysql - 新浪微博中的關注功能是如何設計表結構的?9. docker-compose 為何找不到配置文件?10. docker gitlab 如何git clone?
