python - 使用 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
如何处理这个异常?
解决方案
遇到了类似的问题,不想使用异步批处理请求,因为我使用了多个翻译 API,并且希望所有代码都保持相同。
以下是不同翻译 API 的有效负载限制。这可能会影响限制(例如,每秒多次调用 Amazon Translate API 并使用少量有效负载就可以了):
- 亚马逊:5,000 字节(用于同步实时翻译。)
- DeepL:请求大小不应超过 30kbytes。
- Google Cloud:“我们建议总内容少于 30k 个代码点”。
- Yandex Cloud:所有字符串的最大总长度为 10000 个字符。
亚马逊的限制显然是最低的。
现在了解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 体验更加一致。
推荐阅读
- c# - 如何使用 ReactForms 将带有数组的 formGroup 传递给另一个 formGroup
- wso2 - WSO2 EI 如何发送 HL7 消息(从 XML SOAP 中提取)
- php - 减少 cURL PHP 中的带宽使用
- git - git 1 用 fork 提交,试图解决这个问题
- embedded - Atmel Cortex M4 SAM4S 处理器的 PMC 接口中启动时间变量的用途
- python - Python网络抓取,用于抓取多个链接的循环问题(使用html请求/beautifulsoup)
- c# - 如何将 SQL 查询转换为 Entity Framework Core C# 代码?
- javascript - Bootstrap 5 Carousel 不滑动
- javascript - 在我的 Twig 模板中的脚本之后加载 JQuery
- docker - 远程容器 - Ubuntu:最新 - /dev/null:权限被拒绝