首页 > 解决方案 > 使用 AWS translate api 时出现 ThrottlingException

问题描述

我正在运行这段代码来翻译

translate = boto3.client(service_name='translate',
    aws_access_key_id="secret",
    aws_secret_access_key="secret",
    region_name='eu-central-1',
    use_ssl=True)

translate.translate_text(Text=data,SourceLanguageCode="de",TargetLanguageCode="en").get("TranslatedText")

代码在大部分测试中都能正常运行,但突然抛出以下错误:

An error occurred (ThrottlingException) when calling the TranslateText operation (reached max retries: 4): Rate exceeded 

如何处理这个异常?

标签: pythonamazon-web-servicesamazon-ec2boto3boto

解决方案


遇到了类似的问题,不想使用异步批处理请求,因为我使用了多个翻译 API,并且希望所有代码都保持相同。

以下是不同翻译 API 的有效负载限制。这可能会影响限制(例如,每秒多次调用 Amazon Translate API 并使用少量有效负载就可以了):

亚马逊的限制显然是最低的。

现在了解Amazon Translate 的限制

  • 亚马逊没有说明普通 API 的限制是什么,文档只是说明:

    Amazon Translate 可扩展以服务客户运营流量。如果您遇到持续限制,请联系 AWS Support。

  • 但是AWS GovCloud 的文档确实提到:

    AWS GovCloud(美国)的默认限制设置为每个语言对每 10 秒 5000 个字节和每个语言对每秒 10 个事务。您可以使用Amazon Translate 服务限制增加表单请求增加任何限制。

对于我的用例(将大于 5,000 字节的 HTML 拆分为块后进行翻译),最终在 API 调用之间实现了 15 秒的简单等待,以避免达到限制。在我的测试中,将 2K 到 5K 字节的有效负载翻译 200 次,两次调用之间的睡眠时间为 15 秒,都成功运行(而等待时间仅为 11 秒,我仍然会得到一些ThrottlingException。)

如果我要更好地编码,我可能会像 Marcin 建议的那样使用指数退避实现重试。或者会要求增加限制以使我的生活更轻松,并且我的 API 体验更加一致。


推荐阅读