Python使用requests同时发送多组不同参数POST请求的最快方式是什么
4个POST请求并行发送的最快实现方案
原有代码为同步串行执行逻辑,4个请求依次等待上一个请求响应完成才会发送,总耗时为4次请求的耗时之和。要实现最快发送,核心逻辑是并行发送请求,总耗时近似等于4个请求里响应最慢的那个的耗时,常用的有两种成熟实现方案:
方案1:ThreadPoolExecutor线程池实现(零成本适配原有requests代码)
不需要修改原有请求逻辑,仅通过线程池并行执行任务即可,改造成本极低:
import requests from concurrent.futures import ThreadPoolExecutor # 把所有payload整理为列表 payloads = [payload1, payload2, payload3, payload4] def post_request(payload): return requests.post("abc.com", data=payload) # 开启4个线程同时执行4个请求任务 with ThreadPoolExecutor(max_workers=4) as executor: results = list(executor.map(post_request, payloads))
执行完成后results列表就是4个请求的响应对象,顺序和payloads的顺序一一对应。
方案2:aiohttp异步客户端实现(性能更高,适合后续扩展)
requests本身是同步HTTP库,替换为异步的aiohttp可以进一步降低资源占用,并发效率更高,尤其后续请求量上涨的时候优势会更明显:
import asyncio import aiohttp payloads = [payload1, payload2, payload3, payload4] async def async_post(session, payload): async with session.post("abc.com", data=payload) as response: # 可以根据需求调整返回内容,比如status、response.json()等 return await response.text() async def main(): async with aiohttp.ClientSession() as session: # 同时发起所有请求 tasks = [async_post(session, p) for p in payloads] results = await asyncio.gather(*tasks) return results results = asyncio.run(main())
方案选择建议
- 仅需要临时改造这4个请求、不想调整原有代码逻辑,直接选方案1即可
- 项目后续有扩展更多并发请求的需求,优先选方案2,性能上限更高
内容的提问来源于stack exchange,提问作者happy valeri224
相关产品推荐
相关产品推荐

