【发布时间】:2016-06-05 21:38:13
【问题描述】:
我需要调用某个数据 API 来获取一些数据。想象一下有几百万条这样的记录。对于每个这样的记录,我从记录 ID 和 API 密钥构造数据 URL(返回 JSON 响应),获取响应并将其放入本地数据库。现在,如果我在我的 Mac 上执行此操作,即使使用 16 GB RAM,这也需要几个月的时间。然而,如果我在 AWS 提供的 64 GB 多核 EC2 桌面上试用它,它的运行速度非常快……除非出现问题。
API 服务器可以回答的查询数量存在速率限制。如果超过 40 分钟,它将开始返回错误消息以代替 JSON 响应。而在 EC2 机器上,它最终会达到每分钟 600 个请求。如果它工作正常,我将在 2-3 小时内获得所有数据。有趣的是,速率限制是由 IP 强加的,而不是 API 密钥。因此,如果我能以某种方式欺骗请求的 IP 地址(例如以循环方式从 15 个 IP 的列表中),它将保持在限制范围内。我该怎么做?我正在使用urllib。这是我的示例代码:
url = urltemplate % (list_of_params_including_API_key)
data = json.load(urllib.urlopen(url))
//parse the data and load it into database
【问题讨论】:
-
AWS真的允许你在机器上配置多个IP吗? Python 不是问题,网络堆栈和上游网络必须知道 IP,这样回复才会返回给您。
-
不确定。如果你有什么想法,请告诉我,我会试试的。我对网络的了解几乎接近于零...
-
但是,我怀疑您将不得不使用低级网络 API 来利用它,我不认为
urllib为您提供指定源 IP 的方法。跨度> -
只要它在 Python 中可用,无论是本机还是通过访问系统级的东西,我都可以使用它..