gpt4 book ai didi

python - 使用 Python (IPython) 并行调用多个 API

转载 作者:太空狗 更新时间:2023-10-29 22:06:54 26 4
gpt4 key购买 nike

我在本地计算机 (Mac) 上使用 Python(IPython 和 Canopy)和 RESTful 内容 API。

我有一组 3000 个唯一 ID 可以从 API 中提取数据,并且一次只能使用一个 ID 调用 API。

我希望以某种方式并行进行 3 组 1000 次调用以加快速度。

这样做的最佳方法是什么?

在此先感谢您的帮助!

最佳答案

如果没有关于您正在做什么的更多信息,很难确定,但简单的线程方法可能有意义。

假设您有一个处理单个 ID 的简单函数:

import requests

url_t = "http://localhost:8000/records/%i"

def process_id(id):
"""process a single ID"""
# fetch the data
r = requests.get(url_t % id)
# parse the JSON reply
data = r.json()
# and update some data with PUT
requests.put(url_t % id, data=data)
return data

您可以将其扩展为处理一系列 ID 的简单函数:

def process_range(id_range, store=None):
"""process a number of ids, storing the results in a dict"""
if store is None:
store = {}
for id in id_range:
store[id] = process_id(id)
return store

最后,您可以相当轻松地将子范围映射到线程以允许并发一定数量的请求:

from threading import Thread

def threaded_process_range(nthreads, id_range):
"""process the id range in a specified number of threads"""
store = {}
threads = []
# create the threads
for i in range(nthreads):
ids = id_range[i::nthreads]
t = Thread(target=process_range, args=(ids,store))
threads.append(t)

# start the threads
[ t.start() for t in threads ]
# wait for the threads to finish
[ t.join() for t in threads ]
return store

IPython Notebook 中的完整示例:http://nbviewer.ipython.org/5732094

如果您的各个任务需要的时间差异较大,您可能需要使用 ThreadPool ,它将一次分配一个作业(如果单个任务非常小,通常会更慢,但在异构情况下保证更好的平衡)。

关于python - 使用 Python (IPython) 并行调用多个 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16982569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com