【问题标题】:Why does my bottlenose ErrorHandler not handle 503's为什么我的瓶颈 ErrorHandler 不能处理 503
【发布时间】:2014-08-10 21:14:47
【问题描述】:

我得到了 503。 根据bottlenose的说明,我需要按照说明添加一个error_handler。 在我放置函数的说明中:

def error_handler(err):
    ex = err['exception']
    if isinstance(ex, HTTPError) and ex.code == 503:
        time.sleep(random.expovariate(0.1))
        return True

说明中的示例说要使用这一行:

amazon = bottlenose.Amazon(ErrorHandler=error_handler)

我有这个:

amazon = bottlenose.Amazon(AWSAccessKeyId=ACCESS_KEY_ID, AWSSecretAccessKey = SECRET_KEY,AssociateTag = ASSOC_TAG)

我尝试了几种方式添加选项,例如:

amazon = bottlenose.Amazon(AWSAccessKeyId=ACCESS_KEY_ID, AWSSecretAccessKey = SECRET_KEY,AssociateTag = ASSOC_TAG,ErrorHandler=error_handler)

但我仍然得到 503。我假设我没有设置正确。 我希望有人能告诉我我在哪里错过了这个。 谢谢

【问题讨论】:

  • 如果我的回答有帮助,请确认,以便其他人可以轻松找到此答案。谢谢!

标签: python amazon-web-services amazon-product-api bottlenose


【解决方案1】:

您提交请求的速度是否过快?你需要放慢速度。每秒一个请求是一个不错的速度。

亚马逊产品广告 API 返回三个类别的错误,以便您轻松确定如何最好地处理问题:

  • 2XX 错误是由请求中的错误引起的。例如,您的 请求可能缺少必需的参数。中的错误消息 响应清楚地表明出了什么问题。
  • 4XX 错误是非暂时性错误。收到此错误后, 重新提交请求。
  • 5XX 错误是反映内部错误的瞬态错误 亚马逊。 503 错误意味着您也在提交请求 很快,您的请求就会受到限制。如果是这种情况, 您需要将请求速率降低到每秒一个请求。

【讨论】:

  • 非常感谢您的意见。据我了解,瓶鼻指南中的说明是添加一个 Error_handler 来强制重试。我上面的代码是按照他们的指示进行的尝试。但它不起作用。我正在尝试弄清楚如何让它发挥作用。
  • @arcee123 random.expovariate(0.1) 有时会得到小于 1 的值。尝试使用 time.sleep(2) 检查 503 是否再次发生。
  • 那么,你的意思是,除非我强制等待时间超过一秒,否则在亚秒级裁决中的重复尝试可能会不断让我陷入糟糕的 503 循环?
  • @arcee123 是的。你可以试一试,告诉我它是否有效。
猜你喜欢
  • 1970-01-01
  • 2011-06-19
  • 2015-02-06
  • 2018-07-21
  • 1970-01-01
  • 2010-11-01
  • 1970-01-01
  • 2021-07-08
相关资源
最近更新 更多