Python用多线程并发访问网站服务器,测试网站并发处理效果
转载自:https://blog.csdn.net/qq_34060370/article/details/124790581
-
引入
最近因做的一个小程序,想测试一下,小程序抗并发能力,就用Python写了一小段代码模拟并发访问服务器,看看会怎样,结果就是小程序会很卡。 -
Python技术路线
使用了 multiprocessing.dummy 模块执行多线程并发访问。btw:dummy 模块是多线程,multiprocessing 是多进程。
multiprocessing模块要安装 -
代码逻辑
多线程执行请求,不管请求成功与否,请求后都继续递归,这样就持续访问服务器了 -
代码
import random
import requests
import urllib3
import traceback
from multiprocessing.dummy import Pool
# 设置session
urllib3.disable_warnings()
requests.adapters.DEFAULT_RETRIES = 5 # 增加重连次数
session = requests.session()
session.keep_alive = False # 关闭多余连接,以免链接过多 request报错
def Req(dic):
try:
idx = dic["idx"]
url = 'https://www.xxx.com/'
# 发送get请求
r = session.get(url=url, verify=False)
# 递归再次访问,如此循环,所有线程都不会闲着,都会一直运行
print(f'线程{idx}访问成功,继续递归访问')
Req(dic)
except Exception as e:
print('出错了')
# print(e)
# traceback.print_exc()
# 出错了,也继续递归访问
print(f'线程{idx}访问失败,继续递归访问')
Req(dic)
def Main():
threadLists = [] # 线程用的列表
threadcount = 3000 # 线程大小3000个,看自己电脑性能分配
pool1 = Pool(threadcount) # 线程池,3000个线程
# 给列表初始化共有多少个请求 20w个
for i in range(1, 200000):
threadLists.append({"idx":i})
pool1.map(Req, threadLists)
pool1.close()
pool1.join()
if __name__ == "__main__":
Main();
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。