python并发发送http请求_python3-使用进程方式进行并发请求

1:使用HTTP长连接的方式进行发送请求:

代码如下:

import os

import requests

from requests.adapters import HTTPAdapter

from requests.exceptions import ConnectionError

class AliveRequests(object):

# 会话池

session_pool = {}

def __enter__(self):

self.session()

return self

def __exit__(self, *excinfo):

pass

@staticmethod

def session():

cur_pid = os.getpid()

if cur_pid not in list(AliveRequests.session_pool.keys()):

session = requests.session()

session.mount('http://', HTTPAdapter(pool_maxsize=1000, pool_block=True))

AliveRequests.session_pool[cur_pid] = session

return AliveRequests.session_pool[cur_pid]

@staticmethod

def request(method=None, url=None, headers=None, files=None, data=None, params=None, auth=None, cookies=None, hooks=None, json=None, timeout=None):

session = AliveRequests.session()

request = requests.Request(method, url, headers, files, data, params, auth, cookies, hooks, json)

while True:

try:

with session.send(session.prepare_request(request), timeout=(10, timeout)) as response:

return response

except ConnectionError as err:

err_obj = err.message if isinstance(err.message, Exception) else err

if "BadStatusLine" in err_obj.message or "reset by peer" in err_obj.message:

continue

else:

raise err

except Exception as ex:

raise ex

并发请求:

from multiprocessing import Pool

def work(self):

datas = []

po = Pool(n)  # 设置进程数

res_list = po.map(func(函数名), 参数列表)   # 传入参数列表,传递给函数时参数列表遍历之后将每个元素依此传递,

for res in iter(res_list):

accessToken = res[0].json()["data"]["access_token"] if res[0].status_code == 200 and "data" in res[0].json() else ""

dict_s = {"name": res[2][0],

"accessToken":accessToken,

"user_id":res[2][1],

"time": res[1]}

datas.append(dict_s)

return datas

统计发起请求的事件,单位(s)

resp = AliveRequests.request('POST', self.login_url, params=params, headers=self.headers)

resp.elapsed.total_seconds()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值