使用Google Perspective API遇HTTP Error 429:请求过多如何解决?
解决Perspective API请求429错误的方案
429错误的核心原因是请求频率或总量超出了Perspective API的配额限制,以下是针对性解决方法:
1. 精准控制请求速率
Perspective API免费版默认限制为每分钟60次请求,现有休眠策略不够严谨,建议调整为每个请求后添加固定休眠,配合批量缓冲休眠:
import time import numpy as np def aggressiveLanguage_mapper(input_data): key = "my_key" p = PerspectiveAPI(key) input_data['insult_prob'] = np.nan input_data['toxicity_prob'] = np.nan input_data['threat_prob'] = np.nan ignore_comments_counter = 0 j = 0 for ind, row in input_data.iterrows(): j += 1 # 每个请求后休眠1秒,严格控制在每分钟60次以内 time.sleep(1) if j % 60 == 0: print(f'finished comment {j}/{len(input_data)}') # 批量完成后额外休眠5秒作为缓冲 time.sleep(5) curr_comment_body = row['body'] result = p.score(curr_comment_body, ["INSULT","TOXICITY","THREAT"]) input_data.at[ind,'insult_prob'] = result["INSULT"] input_data.at[ind,'toxicity_prob'] = result["TOXICITY"] input_data.at[ind,'threat_prob'] = result["THREAT"] print(f'total number of comments ignored: {ignore_comments_counter}') return input_data
2. 实现失败重试与指数退避
即使控制速率,偶尔仍可能触发限制,添加重试机制,遇到429时延长休眠时间再重试:
import time import numpy as np from urllib.error import HTTPError def aggressiveLanguage_mapper(input_data): key = "my_key" p = PerspectiveAPI(key) input_data['insult_prob'] = np.nan input_data['toxicity_prob'] = np.nan input_data['threat_prob'] = np.nan ignore_comments_counter = 0 j = 0 for ind, row in input_data.iterrows(): j += 1 curr_comment_body = row['body'] curr_id = row['id'] max_retries = 3 retry_count = 0 success = False while not success and retry_count < max_retries: try: result = p.score(curr_comment_body, ["INSULT","TOXICITY","THREAT"]) input_data.at[ind,'insult_prob'] = result["INSULT"] input_data.at[ind,'toxicity_prob'] = result["TOXICITY"] input_data.at[ind,'threat_prob'] = result["THREAT"] success = True time.sleep(1) # 正常请求后休眠 except HTTPError as e: if e.code == 429: retry_count += 1 sleep_time = 2 ** retry_count # 指数退避:2s、4s、8s print(f"评论{curr_id}触发限制,{sleep_time}秒后重试第{retry_count}次") time.sleep(sleep_time) else: raise # 其他错误直接抛出 if not success: ignore_comments_counter +=1 print(f"评论{curr_id}多次请求失败,已忽略") if j % 60 == 0: print(f'finished comment {j}/{len(input_data)}') print(f'total number of comments ignored: {ignore_comments_counter}') return input_data
3. 减少无效请求
- 去重处理:如果数据框存在重复评论,先对
body列去重,处理后再合并回原数据,避免重复消耗配额。 - 空值/短内容过滤:提前过滤空评论或长度过短的无效内容,减少不必要的请求。
4. 检查并升级API配额
登录Google Cloud控制台查看Perspective API的配额使用情况:
- 若每日配额耗尽,可等待次日重置,或升级付费套餐提升配额;
- 若速率配额仍不足,可申请提高速率限制。
5. 尝试批量请求(若API支持)
Perspective API部分版本支持批量提交评论,将多个评论打包为一个请求发送,可大幅降低请求次数,具体可参考官方文档中的批量接口说明。
内容的提问来源于stack exchange,提问作者Sar99
相关产品推荐
相关产品推荐

