python - 每个请求延迟1秒,每小时3600不够

标签 python amazon-product-api

Amazon API 的限制显然是每秒 1 个请求或每小时 3600 个请求。所以我是这样实现的:

while True:
    #sql stuff
    time.sleep(1)
    result = api.item_lookup(row[0], ResponseGroup='Images,ItemAttributes,Offers,OfferSummary', IdType='EAN', SearchIndex='All')
    #sql stuff

错误:

amazonproduct.errors.TooManyRequests: RequestThrottled: AWS Access Key ID: ACCESS_KEY_REDACTED. You are submitting requests too quickly. Please retry your requests at a slower rate.

有什么想法吗?

最佳答案

这段代码看起来是正确的,并且看起来 1 个请求/秒的限制仍然是实际的: http://docs.aws.amazon.com/AWSECommerceService/latest/DG/TroubleshootingApplications.html#efficiency-guidelines

您要确保没有其他进程在使用同一个关联帐户。根据您运行代码的位置和方式,可能有一个旧版本的 VM,或者您的应用程序的另一个实例正在运行,或者可能有一个版本在云上而另一个在您的笔记本电脑上,或者如果您使用的是线程 Web 服务器,可能有多个线程都运行相同的代码。

如果您仍然达到查询限制,您只想重试,可能使用类似 TCP 的“加法增加/乘法减少”回退。您首先设置 extra_delay = 0。当请求失败时,您设置 extra_delay += 1sleep(1 + extra_delay),然后重试。当它最终成功时,设置 extra_delay = extra_delay * 0.9

关于python - 每个请求延迟1秒,每小时3600不够,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39676973/

相关文章:

amazon-web-services - 亚马逊产品广告 API - 获取 ASIN 的所有 OfferListingID

python - 我们如何将 numpy 数组的两列连接成一列,并用空格分隔值?

python - 使用 raw_input 将 Python 的值添加到 Mysql

c# - 亚马逊产品广告 API C#

amazon-product-api - 如何通过亚马逊API获取书籍封面图片

amazon-product-api - 如何通过API获取亚马逊商品信息

python - 在 Django REST 中增加计数器字段的最佳位置

python - Django 模型继承。隐藏或删除字段

python - 完整性错误 : distinguish between unique constraint and not null violations