栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python用多线程并发访问网站服务器,测试网站并发处理效果

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python用多线程并发访问网站服务器,测试网站并发处理效果

文章目录
  • 1.引入
  • 2.Python技术路线
  • 3.代码逻辑
  • 4.效果
  • 5.代码


1.引入

最近因做的一个小程序,想测试一下,小程序抗并发能力,就用Python写了一小段代码模拟并发访问服务器,看看会怎样,结果就是小程序会很卡。

2.Python技术路线

使用了 multiprocessing.dummy 模块执行多线程并发访问。btw:dummy 模块是多线程,multiprocessing 是多进程。
multiprocessing模块要安装

3.代码逻辑

多线程执行请求,不管请求成功与否,请求后都继续递归,这样就持续访问服务器了

4.效果


5.代码
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();

btw:代码功能接近多线程爬虫

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/887342.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号