如何在lambda函数中加time.sleep避免GoogleTranslator API调用崩溃
实现GoogleTranslator延迟调用避免频率限制的方案
你当前的代码有两个容易触发接口报错的问题:一是每次调用翻译接口都重新初始化翻译器实例,额外增加开销;二是没有请求间隔,批量跑的时候很容易触发1秒5次的频率上限。
按照以下方式调整即可:
- 首先引入需要的依赖
import time from deep_translator import GoogleTranslator
- 单独定义带延迟逻辑的翻译函数,不要直接写内联lambda
# 全局只初始化一次翻译器实例,减少不必要开销 translator = GoogleTranslator(source='auto', target='en') def translate_with_delay(text): # 每次发起请求前等待0.5秒,每秒最多发起2次请求,远低于频率阈值 time.sleep(0.5) return translator.translate(text)
- 替换原来的apply调用逻辑
test["Label"] = test["cleanText"].apply(translate_with_delay)
注意事项
- 不要把
time.sleep(0.5)写在apply行的外层,那样只会在批量翻译启动前等待一次,完全起不到单请求间隔的作用 - 0.5秒的间隔留了足够的安全冗余,如果你的数据量较大,也可以根据实际情况调整到0.3秒(每秒最多3次请求),依然不会触发频率限制
- 如果需要处理偶发的网络波动/接口临时报错,可以给函数加上简单的重试逻辑,参考实现:
def translate_with_delay_retry(text, max_retry=3): for attempt in range(max_retry): try: time.sleep(0.5) return translator.translate(text) except Exception as e: if attempt == max_retry - 1: # 重试次数耗尽后抛出异常 raise e # 报错后额外等待1秒再发起下一次尝试 time.sleep(1)
内容的提问来源于stack exchange,提问作者Daniel AG
相关产品推荐
相关产品推荐

