仅每分钟运行一次仍触发gspread的Google Sheets API配额超限问题
解决Google Colab调用Sheets API触发429配额超限问题
问题场景
在Google Colab中执行挂载Drive、授权登录、通过gspread读写表格的流程,代码如下:
from google.colab import drive drive.mount('/content/drive') import gspread from google.colab import auth auth.authenticate_user() from google.auth import default creds, _ = default() gc = gspread.authorize(creds) worksheet = gc.open_by_key('some_key').sheet1 import pandas as pd dataframe = pd.DataFrame(worksheet.get_all_records()) aslist = dataframe.values.tolist() # 数据处理逻辑 from pprint import pprint pprint(gc.list_spreadsheet_files()) sheet = gc.open_by_key('some_other_key') sheet.values_update( 'Sheet1!A1', params={'valueInputOption': 'RAW'}, body={'values': newlist} )
运行时触发429配额超限错误:
APIError: { 'code': 429, 'message': "Quota exceeded for quota metric 'Read requests' and limit 'Read requests per minute' of service 'sheets.googleapis.com' for consumer 'project_number:some_id'.", 'status': 'RESOURCE_EXHAUSTED', 'details': [ { '@type': 'type.googleapis.com/google.rpc.ErrorInfo', 'reason': 'RATE_LIMIT_EXCEEDED', 'domain': 'googleapis.com', 'metadata': { 'quota_limit': 'ReadRequestsPerMinutePerProject', 'quota_location': 'global', 'consumer': 'projects/some_id', 'quota_metric': 'sheets.googleapis.com/read_requests', 'service': 'sheets.googleapis.com', 'quota_limit_value': '1500' } }, { '@type': 'type.googleapis.com/google.rpc.Help', 'links': [ { 'description': 'Request a higher quota limit.', 'url': 'https://cloud.google.com/docs/quota#requesting_higher_quota' } ] } ] }
同时遇到以下问题:
- 在Google Cloud控制台找不到错误中提到的项目ID
- 启用Google Sheets API后,仍看不到配额使用指标
- 查看Cloud监控界面时,仅显示「无可用数据」(原英文界面翻译,时间范围为过去1小时,无任何指标图表)
解决方案
1. 切换到自定义GCP项目(解决无法查看配额的问题)
Colab默认使用Google共享的公共项目,导致用户无法在自己的Cloud控制台查看配额。需改用自定义GCP项目:
- 操作步骤:
- 登录Google Cloud控制台,创建新项目或选择现有项目
- 在项目中启用「Google Sheets API」
- 创建服务账号密钥(JSON格式),下载到本地
- 在Colab中上传该密钥文件,替换原授权代码为:
import gspread from google.oauth2.service_account import Credentials scopes = [ 'https://www.googleapis.com/auth/spreadsheets', 'https://www.googleapis.com/auth/drive' ] # 替换为你的服务账号密钥文件名 creds = Credentials.from_service_account_file('service-account-key.json', scopes=scopes) gc = gspread.authorize(creds)
- 切换后,即可在自己的GCP项目中查看和管理Sheets API配额
2. 临时缓解配额超限
- 合并API请求:避免循环调用读取接口,一次性获取全部数据(如原代码中
get_all_records()已做到,但需避免重复调用) - 添加请求延迟:在频繁的API操作之间加入延迟,降低请求频率:
import time # 在读写操作前/后添加1秒延迟 time.sleep(1) - 批量操作:使用
values_update批量写入数据,避免单条数据单独请求
3. 查看及申请配额提升
切换到自定义项目后:
- 进入GCP控制台的「APIs和服务」->「仪表盘」
- 点击「配额」选项卡,找到「Google Sheets API」的「读请求/分钟」配额
- 若默认配额不足,点击配额旁的「申请增加配额」,按指引提交申请即可
内容的提问来源于stack exchange,提问作者qwerty_99
相关产品推荐
相关产品推荐

