Web應(yīng)用程序在ssl.py中在self._sslobj.do_handshake()上掛了幾個(gè)小時(shí)。
瀏覽了StackOverflow的Python部分之后,我發(fā)現(xiàn)了一些可能無(wú)法解決導(dǎo)致該問(wèn)題的核心問(wèn)題的方法,但是絕對(duì)足以應(yīng)付出現(xiàn)該問(wèn)題的任何情況。以下問(wèn)題具有各種解決方案,如果函數(shù)花費(fèi)太長(zhǎng)時(shí)間才能完成,則會(huì)拋出某種異常。這就是我最終解決此問(wèn)題的方式。最佳答案是僅UNIX,但是還有其他一些使用線(xiàn)程并在每個(gè)平臺(tái)上都可以使用的工具:
超時(shí)功能(如果完成時(shí)間太長(zhǎng))
這是一個(gè)奇怪的問(wèn)題,實(shí)際上很難復(fù)制。在成千上萬(wàn)的API調(diào)用之后,我只見(jiàn)過(guò)兩次。我認(rèn)為,有人會(huì)找到比這更好的解決方案的可能性很小,這雖然有點(diǎn)可笑,但絕對(duì)可以解決問(wèn)題。您可以引發(fā)異常,然后再次嘗試SSL連接,或者繼續(xù)執(zhí)行程序的另一部分。
我認(rèn)為目前的答案就足夠了,但是如果有人有更好的選擇,請(qǐng)隨時(shí)提出。老實(shí)說(shuō),似乎唯一解決此問(wèn)題的方法可能是實(shí)際ssl.py庫(kù)中的錯(cuò)誤修復(fù),但我無(wú)法肯定地說(shuō)。
解決方法我正在使用Python2.7.5。我有一個(gè)網(wǎng)絡(luò)應(yīng)用程序,該應(yīng)用程序每隔幾分鐘會(huì)查詢(xún)API,并且在最后一天左右的時(shí)間內(nèi)一直成功運(yùn)行。但是,在將其放置幾個(gè)小時(shí)后,我回來(lái)了,發(fā)現(xiàn)我的程序停頓了好幾個(gè)小時(shí)都沒(méi)有任何活動(dòng)。我退出了該程序,發(fā)現(xiàn)在一天中的大部分時(shí)間里,在一次API調(diào)用期間,該程序都已停在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庫(kù)的問(wèn)題,但此后已修復(fù)。我想知道為什么我的程序在不拋出異?;蛉魏萎惓5那闆r下卡在這里。
如果有一種方法可以設(shè)置SSL握手方法的超時(shí)時(shí)間,那么我很樂(lè)意這樣做,因?yàn)槲蚁M苊馕业某绦虮活?lèi)似的事情無(wú)限期地停止。我正在使用RequestsHTTP庫(kù),如果有問(wèn)題,它將在Mac OSX 10.9上運(yùn)行。有什么建議嗎?
編輯:我進(jìn)行了一些研究,盡管2.6中實(shí)現(xiàn)了“修復(fù)”,但似乎其他人也遇到了SSL的特定問(wèn)題。但是,尚不確定解決方案是什么。任何幫助表示贊賞。
編輯3: 添加我的解決方案作為對(duì)此問(wèn)題的答案。
相關(guān)文章:
1. 查詢(xún)mysql數(shù)據(jù)庫(kù)中指定表指定日期的數(shù)據(jù)?有詳細(xì)2. mysql - 怎么生成這個(gè)sql表?3. mysql儲(chǔ)存json錯(cuò)誤4. php - 公眾號(hào)文章底部的小程序二維碼如何統(tǒng)計(jì)?5. mysql - 表名稱(chēng)前綴到底有啥用?6. mysql - 數(shù)據(jù)庫(kù)表中,兩個(gè)表互為外鍵參考如何解決7. Navicat for mysql 中以json格式儲(chǔ)存的數(shù)據(jù)存在大量反斜杠,如何去除?8. 在mybatis使用mysql的ON DUPLICATE KEY UPDATE語(yǔ)法實(shí)現(xiàn)存在即更新應(yīng)該使用哪個(gè)標(biāo)簽?9. mysql - 數(shù)據(jù)庫(kù)建字段,默認(rèn)值空和empty string有什么區(qū)別 11010. sql語(yǔ)句 - 如何在mysql中批量添加用戶(hù)?
