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)

相关推荐
测试人社区-千羽13 小时前
边缘计算场景下的智能测试挑战
人工智能·python·安全·开源·智能合约·边缘计算·分布式账本
抽象带篮子13 小时前
Pytorch Lightning 框架运行顺序
人工智能·pytorch·python
yue00813 小时前
C# winform自定义控件
开发语言·c#
哇哈哈&14 小时前
安装wxWidgets3.2.0(编译高版本erlang的时候用,不如用rpm包),而且还需要高版本的gcc++19以上,已基本舍弃
linux·数据库·python
JANGHIGH14 小时前
c++ 多线程(三)
开发语言·c++
2503_9284115614 小时前
12.9 Vue3+Vuex+Js+El-Plus+vite(项目搭建)
开发语言·javascript·ecmascript
卓码软件测评14 小时前
第三方软件验收评测机构【Gatling安装指南:Java环境配置和IDE插件安装】
java·开发语言·ide·测试工具·负载均衡
weixin_3077791314 小时前
Jenkins中的Jakarta Activation API插件:功能、使用与最佳实践
运维·开发语言·ci/cd·自动化·jenkins
weixin_4399306414 小时前
前端js日期计算跨月导致的错误
开发语言·前端·javascript
luod14 小时前
pymysql执行DDL语句
python