python 并行请求多个 HTTP 接口

在需要并行请求多个 HTTP 接口的场景中,并且每个接口的查询参数(query)都不同时,可以结合 Python 的 concurrent.futures.ThreadPoolExecutor 来实现高效的并行请求处理。下面是一个示例代码,展示如何为每个接口配置不同的查询参数,并执行并行请求:

import requests

from concurrent.futures import ThreadPoolExecutor, as_completed

定义接口的 URL 列表

urls = [

"http://1",

"http://2/search",

"http://3/search",

"http://4/search",

"http://5:8/search"

]

定义每个请求的 query 参数

queries = [

"query_1",

"query_2",

"query_3",

"query_4",

"query_5"

]

请求头

headers = {

"Content-Type": "application/json"

}

定义请求函数

python 复制代码
# 定义请求函数
def post_request(url, query):
    data = {
        "serviceVersion": "6",
        "request": {"query": query},
        "skipCache": True,
        "serviceId": "game-predicte-intention",
        "fetchResultNodeIds": ["12"]
    }

    try:
        response = requests.post(url, json=data, headers=headers)
        response.raise_for_status()  # 检查请求是否成功
        result = response.json().get('result', {})
        return url, result
    except requests.RequestException as e:
        return url, f"Request failed: {e}"

使用多线程进行并行请求

python 复制代码
# 使用多线程进行并行请求
def parallel_requests(urls, queries):
    results = {}
    with ThreadPoolExecutor(max_workers=len(urls)) as executor:
        # 提交每个 (url, query) 对应的请求
        future_to_request = {executor.submit(post_request, url, query): (url, query) for url, query in zip(urls, queries)}

        for future in as_completed(future_to_request):
            url, query = future_to_request[future]
            try:
                url, result = future.result()
                results[(url, query)] = result
                print(f"URL: {url}, Query: {query}, Result: {result}")
            except Exception as e:
                print(f"Error processing URL {url} with Query {query}: {e}")

    return results

执行并行请求

result_set = parallel_requests(urls, queries)

相关推荐
hqwest10 分钟前
C#WPF实战出真汁01--项目介绍
开发语言·c#·wpf
xnglan32 分钟前
蓝桥杯手算题和杂题简易做法
数据结构·数据库·c++·python·算法·职场和发展·蓝桥杯
No Silver Bullet1 小时前
HTTPS 工作原理
网络协议·http·https
qq_282195311 小时前
cpp-httplib 测试https功能
网络协议·http·https
姓刘的哦1 小时前
Win10上Qt使用Libcurl库
开发语言·qt
檀越剑指大厂1 小时前
【开发语言】Groovy语言:Java生态中的动态力量
java·开发语言
stbomei1 小时前
C 语言判断一个数是否是素数的三种方法文章提纲
c语言·开发语言·算法
小牛壮士1 小时前
Tokenizer(切词器)的不同实现算法
开发语言·算法·c#
小徐敲java1 小时前
python-pycharm切换python各种版本的环境与安装python各种版本的环境(pypi轮子下载)
开发语言·python·pycharm
活宝小娜1 小时前
新增和编辑共用弹窗模板
开发语言·前端·javascript·vue.js