2

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

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 

如何处理这个异常?

4

4 回答 4

2

遇到了类似的问题,不想使用异步批处理请求,因为我使用了多个翻译 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 体验更加一致。

于 2021-02-06T08:44:09.547 回答
2

此链接提供限制异常的答案 https://docs.aws.amazon.com/translate/latest/dg/what-is-limits.html#limits-throttling 该服务根据流量模式扩展队列。我想知道您达到限制的 TPS 是多少。

&

您是否也尝试过像 eu-west-1 这样的不同区域?

于 2020-04-06T16:39:42.623 回答
0

这个问题现在已经有几个月了,但这里的解决方案对我来说效果很好,让我避免了编写自己的退避代码:

import boto3
from botocore.config import Config

config = Config(retries=dict(max_attempts=10))
region = "us-east-1"

translate = boto3.client(
    service_name="translate",
    region_name=region,
    use_ssl=True,
    config=config,
)

即使在 us-east-1 中,我似乎也重试了几次,而且它比 Google Cloud Translate 慢得多(我也在同一脚本中从 Python 中点击),但它可以工作。

于 2021-01-13T23:38:10.907 回答
0

您是否考虑过使用异步调用start_text_translation_job()而不是同步调用translate_text()?然后你会有一个更高的限制,而不是 5000 个字节,你会有 1,000,000 个字符 * 1,000,000 个文档 * 10 个批次:https://docs.aws.amazon.com/translate/latest/dg/what-is-limits。 html#limits-节流

同步实时转换限制:

Description Limit
Character encoding  UTF-8
Maximum document size (UTF-8 characters)    5,000 bytes

异步批量翻译限制:

Description Limit
Character encoding  UTF-8
Maximum number of characters per document   1,000,000
Maximum size per document   20 MB
Maximum number of documents in batch    1,000,000
Maximum size of total documents in batch    5 GB
Maximum number of parallel batch translation jobs   10

异步 调用的代码start_text_translation_job()可以在这里找到: https ://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/translate.html

response = client.start_text_translation_job(
    JobName='string',
    InputDataConfig={
        'S3Uri': 'string',
        'ContentType': 'string'
    },
    OutputDataConfig={
        'S3Uri': 'string'
    },
    DataAccessRoleArn='string',
    SourceLanguageCode='string',
    TargetLanguageCodes=[
        'string',
    ],
    TerminologyNames=[
        'string',
    ],
    ClientToken='string'
)
于 2020-08-05T12:17:26.223 回答