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)

相关推荐
贩卖黄昏的熊7 小时前
flex 布局快速梳理
开发语言·javascript·css3·html5
天天进步20157 小时前
Python全栈项目--校园智能宿舍管理系统
开发语言·python
CodeStats7 小时前
从 CPU 指令到 JVM 进程:彻底讲透 Java 执行 main 方法时,类加载、主线程、栈帧入栈的完整底层逻辑
java·linux·开发语言
测试员周周7 小时前
【AI测试智能体-面试】AI测试面试60题(附回答思路)
人工智能·python·功能测试·测试工具·单元测试·自动化·测试用例
阿正的梦工坊7 小时前
【Rust】09-泛型、Trait 与生命周期基础
开发语言·rust·c#
用户8356290780518 小时前
使用 Python 操作 Word 评论和回复
后端·python
阿正的梦工坊8 小时前
【Rust】07-错误处理:Option、Result 与 ? 运算符
开发语言·算法·rust
Zella折耳根8 小时前
复习篇-继承和接口
java·开发语言·python
z落落8 小时前
C# 事件(Event)+自定义带参数事件例子
开发语言·分布式·c#