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使用不是线程安全的,或者如果有其他原因的失败?
显然,即使连接成功协商,超时也会在指定的时间量后终止连接。我认为只有在规定的时间内无法建立连接才会超时。删除超时后,所有请求都成功了,但仍然比我想要的慢。 – ClassicThunder 2012-02-17 21:23:10