aiohttp 高并发web服务_aiohttp异步编程(一)

# 异步并发客户端

class Asyncio_Client(object):

def __init__(self):

self.loop=asyncio.get_event_loop()

self.tasks=[]

# 将异步函数介入任务列表。后续参数直接传给异步函数

def set_task(self,task_fun,num,*args):

for i in range(num):

self.tasks.append(task_fun(*args))

# 运行,获取返回结果

def run(self):

back=[]

try:

f = asyncio.wait(self.tasks)  # 创建future

self.loop.run_until_complete(f) # 等待future完成

finally:

pass

# 服务器高并发压力测试

class Test_Load():

total_time=0 # 总耗时

total_payload=0 # 总负载

total_num=0 # 总并发数

all_time=[]

# 创建一个异步任务,本地测试,所以post和接收几乎不损耗时间,可以等待完成,主要耗时为算法模块

async def task_func1(self,session):

begin = time.time()

# print('开始发送:', begin)

file=open(self.image, 'rb')

fsize = os.path.getsize(self.image)

self.total_payload+=fsize/(1024*1024)

data = {"image_id": "2", 'image':file}

r = await session.post(self.url,data=data) #只post,不接收

result = await r.json()

self.total_num+=1

# print(result)

end = time.time()

# print('接收完成:', end,',index=',self.total_num)

self.all_time.append(end-begin)

# 负载测试

def test_safety(self):

print('test begin')

async_client = Asyncio_Client() # 创建客户端

session = aiohttp.ClientSession()

for i in range(10): # 执行10次

self.all_time=[]

self.total_num=0

self.total_payload=0

self.image = 'xxxx.jpg' # 设置测试nayizhang

print('测试图片:', self.image)

begin = time.time()

async_client.set_task(self.task_func1,self.num,session) # 设置并发任务

async_client.run()  # 执行任务

end=time.time()

self.all_time.sort(reverse=True)

print(self.all_time)

print('并发数量(个):',self.total_num)

print('总耗时(s):',end-begin)

print('最大时延(s):',self.all_time[0])

print('最小时延(s):', self.all_time[len(self.all_time)-1])

print('top-90%时延(s):', self.all_time[int(len(self.all_time)*0.1)])

print('平均耗时(s/个):',sum(self.all_time)/self.total_num)

print('支持并发率(个/s):',self.total_num/(end-begin))

print('总负载(MB):',self.total_payload)

print('吞吐率(MB/S):',self.total_payload/(end-begin))  # 吞吐率受上行下行带宽,服务器带宽,服务器算法性能诸多影响

time.sleep(3)

session.close()

print('test finish')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值