我正在使用Python(IPython
我有一个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笔记本中的完整示例:http://nbviewer.ipython.org/5732094
如果您的单个任务需要的时间范围更广,那么您可能希望使用线程池,它将一次分配一个作业(如果单个任务非常小,则通常速度较慢,但在异构情况下可以保证更好的平衡)。
从我所读到的内容来看,Python中有两种调试代码的方法: > 使用传统调试器,如或。它支持诸如用于、用于、用于等命令,但是您不能直接访问IPython shell,这对于对象检查非常有用。 通过在代码中嵌入IPython shell来使用IPython。您可以从IPython导入嵌入,然后在代码中使用。当您的程序/脚本命中语句时,您将被放到IPython shell中。这允许使用IPython的
问题内容: 根据我的阅读,有两种方法可以在Python中调试代码: 使用传统的调试器,例如或。它支持诸如for ,for ,for等命令,但是您没有直接访问IPython shell的权限,这对于对象检查非常有用。 使用 IPython的 通过嵌入代码中的一个IPython的壳。您可以这样做,然后在您的代码中使用。当您的程序/脚本命中一条语句时,您将进入IPython shell。这允许使用所有I
我对Spring的靴子是陌生的,在它们到来的时候学习。我有一个关于并行API调用的快速问题。 我有一个ID数组,我将把它附加到第三方APIendpoint,发出GET请求,聚合数据,并在所有3000个调用完成后从中生成一个文件。 这里的问题是Array的大小为3000,即我预计会进行3000次调用。我觉得使用for循环并迭代超过3000次没有任何意义,而且效率较低。 有谁能给我建议一个最好、最有效
我想使用Jupyter笔记本,但在进行基本导入(如导入matplotlib)时遇到困难。我想这是因为我有几个用户管理的python安装。例如: 我以前有anaconda,但是从~/anaconda目录中删除了if。现在,当我启动Jupyter笔记本时,我得到一个内核错误: 我该怎么办?!
问题内容: 假设我有一个IPython会话,从中调用一些脚本: 有没有一种方法可以引入断点,从中可以从IPython检查工作区? 我记得在以前的IPython版本中可以做到这一点: 但是该子模块似乎不再可用。 假设我已经打开了IPython会话: 如何在我选择的位置停止程序并使用IPython检查我的工作区 ? 通常,我更喜欢不需要我预先指定行号的解决方案,因为我希望上面有多个这样的调用,而不必跟
返回的流量 返回一个 如果您不能回答我的问题,请至少告诉我如何并行地执行多个API调用,并在WebClient中等待结果