我正在开发一个HTTP客户端,它可以每秒生成数百个连接,并在每个连接上发送最多10个请求。我使用线程来实现并发。
下面是我的代码:
def generate_req(reqSession):
requestCounter = 0
while requestCounter < requestRate:
try:
response1 = reqSession.get('http://20.20.1.2/tempurl.html')
if response1.status_code == 200:
client_notify('r')
except(exceptions.ConnectionError, exceptions.HTTPError, exceptions.Timeout) as Err:
client_notify('F')
break
requestCounter += 1
def main():
for q in range(connectionPerSec):
s1 = requests.session()
t1 = threading.Thread(target=generate_req, args=(s1,))
t1.start()
问题:
当requestRate = 1时,它无法扩展到超过200个连接/秒。我在同一客户机上运行了其他可用的HTTP客户端,并针对服务器进行测试,测试运行良好,可以扩展。
当requestRate = 10时,每秒连接数下降到30。 原因:无法每秒创建指定数量的线程。
对于问题#2,客户端机器无法创建足够的请求会话和启动新的线程。一旦将requestRate设置为大于1,就会出现问题。 我怀疑这与requests使用的HTTP连接池有关。
请建议我在这里做错了什么。
concurrent.futures
。 - Denilson Sá Maia