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 += 1
和 sleep(1 + extra_delay)
,然后重试。当它最终成功时,设置 extra_delay = extra_delay * 0.9
。
关于python - 每个请求延迟1秒,每小时3600不够,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39676973/