【发布时间】:2021-03-12 22:54:21
【问题描述】:
第一次使用 google(和所有)api 调用时,尽管限制了我的速率,但我不断地达到速率限制阈值。我将如何将以下代码更改为批处理格式以避免这种情况?
#API Call Function
from ratelimit import limits, sleep_and_retry
import requests
from googleapiclient.discovery import build
@sleep_and_retry
@limits(calls=1, period=4.5)
def pull_sheet_data(SCOPE,SPREADSHEET_ID,DATA_TO_PULL):
creds = gsheet_api_check(SCOPE)
service = build('sheets', 'v4', credentials=creds)
sheet = service.spreadsheets()
result = sheet.values().get(
spreadsheetId=SPREADSHEET_ID,
range=DATA_TO_PULL).execute()
values = result.get('values', [])
if not values:
print('No data found.')
else:
rows = sheet.values().get(spreadsheetId=SPREADSHEET_ID,
range=DATA_TO_PULL).execute()
data = rows.get('values')
print("COMPLETE: Data copied")
return data
#list files in the active brews folder
activebrews = drive.ListFile({'q':"'0BxU70FB_wb-Da0x5amtYbUkybXc' in parents"}).GetList()
tabs = ['Brew Log','Fermentation Log','Centrifuge Log']
brewsheetdict ={}
#Pulls data from the entire spreadsheet tab.
for i in activebrews:
for j in tabs:
#set spreadsheet parameters
SCOPE = ['https://www.googleapis.com/auth/drive.readonly']
SPREADSHEET_ID = i['id']
data = pull_sheet_data(SCOPE,SPREADSHEET_ID,j)
dftitle = str(i['title'])
dftab = str(j)
dfname = dftitle+'_'+dftab
brewsheetdict[dfname] = pd.DataFrame(data)
谢谢!
【问题讨论】:
-
sheet.values().get()用于一个电子表格。那么在你的情况下,在循环中使用time.sleep,你会得到什么结果呢? -
我现在正在运行它,它似乎正在工作,在第二个循环中添加一秒钟的睡眠时间肯定是矫枉过正,但它比迭代代码直到一遍又一遍地达到速率限制要快!谢谢!
-
感谢您的回复。我很高兴你的问题得到了解决。在现阶段,Sheets API 中还没有实现多个 Google Spreadsheets 的批量请求的方法。由此,我认为使用
time.sleep可能适合作为一种解决方法。当您的问题解决后,您可以将其发布为答案吗?这样,它对遇到相同问题的其他用户很有用。
标签: python pandas google-sheets google-api