python3.6 asyncio_python3.6使用aiohttp和asyncio启动100万个请求

我试图用aiohttp和asyncio连续10次发出100万次请求,每次10k次 . 当我打印每个请求的开始时间时,我发现100万个请求不是在非常封闭的时间开始,而是在serval分钟内 . 根据我的理解,100万个请求将在没有任何等待的情况下发送(或者只是以微秒为单位)?希望有人可以帮我提出如何更改代码的建议,我的代码如下所示 . 提前致谢!

import asyncio

import requests

import json

import pymysql

from aiohttp import ClientSession

from datetime import datetime

import uvloop

# login config

URL_LOGIN = "https://test.com/user/login"

APP_ID = "sample_app_id"

APP_SECRET = "sample_secret"

async def login_user(phone, password, session, i):

start_time = datetime.now()

h = {

"Content-Type": "application/json"

}

data = {

"phone": phone,

"password": password,

"appid": APP_ID,

"appsecret": APP_SECRET

}

try:

async with session.post(url=URL_LOGIN, data=json.dumps(data), headers=h) as response:

r = await response.read()

end_time = datetime.now()

cost = (end_time-start_time).seconds

msg = "number %d request,start_time:%s, cost_time: %d, response: %s\n" % (i, start_time, cost, r.decode())

print("running %d" % i, datetime.now())

except Exception as e:

print("running %d" % i)

msg = "number %d request raise error" % i+str(e)+"\n"

with open("log", "a+") as f:

f.write(msg)

async def bound_login(sem, phone, password, session, i):

async with sem:

await login_user(phone, password, session, i)

async def run_login(num):

tasks = []

sem = asyncio.Semaphore(10000)

async with ClientSession() as session:

for i in range(num):

task = asyncio.ensure_future(bound_login(sem, str(18300000000+i), "123456", session, i))

tasks.append(task)

responses = asyncio.gather(*tasks)

await responses

start = datetime.now()

number = 100000

loop = uvloop.new_event_loop()

asyncio.set_event_loop(loop)

future = asyncio.ensure_future(run_login(number))

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值