2012-02-17 36 views
0

我製作了一個小型python腳本來強調測試我在上市之前一直在處理的網站。它通過每隔5分鐘產生一個新線程來運行,在一段時間(true)循環中運行下面的代碼。httplib.HTTPSConnection在併發環境中導致SSL錯誤

conn = httplib.HTTPSConnection("site", 000, "pem", "pem", timeout = 30) 
conn.request("GET", "/reports.php?" + url, headers = headers) 
response = conn.getresponse() 
read = (response.read()) 

如果我只有一個線程,那麼代碼請求/響應每次都成功。在創建新線程時,我經常會遇到下面的錯誤。最終當有大約10個線程時,大約90%的時間都會失敗。

Traceback (most recent call last): 
    File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner 
    self.run() 
    File "/usr/lib/python2.7/threading.py", line 505, in run 
    self.__target(*self.__args, **self.__kwargs) 
    File "stresstest.py", line 32, in threadproc 
    stressTest(conn) 
    File "stresstest.py", line 76, in stressTest 
    response = conn.getresponse() 
    File "/usr/lib/python2.7/httplib.py", line 1027, in getresponse 
    response.begin() 
    File "/usr/lib/python2.7/httplib.py", line 407, in begin 
    version, status, reason = self._read_status() 
    File "/usr/lib/python2.7/httplib.py", line 365, in _read_status 
    line = self.fp.readline() 
    File "/usr/lib/python2.7/socket.py", line 430, in readline 
    data = recv(1) 
    File "/usr/lib/python2.7/ssl.py", line 232, in recv 
    return self.read(buflen) 
    File "/usr/lib/python2.7/ssl.py", line 151, in read 
    return self._sslobj.read(len) 
SSLError: The read operation timed out 

我想知道如果ssl代碼httplib使用不是線程安全的,或者如果有其他原因的失敗?

回答

2

它是線程安全的。您可能需要開始查看服務器代碼的性能...

+2

顯然,即使連接成功協商,超時也會在指定的時間量後終止連接。我認爲只有在規定的時間內無法建立連接纔會超時。刪除超時後,所有請求都成功了,但仍然比我想要的慢。 – ClassicThunder 2012-02-17 21:23:10