Raf*_*ael 5 python google-api google-drive-api google-api-python-client pydrive
我通过pydrive使用Google Drive API 在两个谷歌驱动器帐户之间移动文件.我一直在测试一个包含16个文件的文件夹.我的代码总是在第六个文件中引发错误
"超出用户速率限制">
我知道请求数量有限制(10/s或1000/100s),但我已尝试使用Google Drive API建议的指数退避来处理此错误.即使在248秒之后,它仍然会引发同样的错误.
这是我正在做的一个例子
def MoveToFolder(self,files,folder_id,drive):
total_files = len(files)
for cont in range(total_files):
success = False
n=0
while not success:
try:
drive.auth.service.files().copy(fileId=files[cont]['id'],
body={"parents": [{"kind": "drive#fileLink", "id": folder_id}]}).execute()
time.sleep(random.randint(0,1000)/1000)
success = True
except:
wait = (2**n) + (random.randint(0,1000)/1000)
time.sleep(wait)
success = False
n += 1
Run Code Online (Sandbox Code Playgroud)
我尝试使用"批处理请求"来复制文件,但它会为10个文件引发相同的错误.
def MoveToFolderBatch(self,files,folder_id,drive):
cont=0
batch = drive.auth.service.new_batch_http_request()
for file in files:
cont+=1
batch.add(drive.auth.service.files().copy(fileId=file['id'],
body={"parents": [
{"kind": "drive#fileLink", "id": folder_id}]}))
batch.execute()
Run Code Online (Sandbox Code Playgroud)
有人有任何提示吗?
编辑:根据谷歌支持:
关于超出用户速率限制错误,与控制台中设置的每用户速率限制完全无关.相反,它来自Drive API依赖的内部Google系统,并且最有可能在单个帐户拥有域中的所有文件时发生.我们不建议单个帐户拥有所有文件,而是让域中的个人用户拥有这些文件.要传输文件,您可以查看此链接.另外,请检查建议上的此链接以避免错误.
403: User Rate Limit Exceeded基本上是防洪。
{
"error": {
"errors": [
{
"domain": "usageLimits",
"reason": "userRateLimitExceeded",
"message": "User Rate Limit Exceeded"
}
],
"code": 403,
"message": "User Rate Limit Exceeded"
}
}
Run Code Online (Sandbox Code Playgroud)
你需要放慢速度。像您所做的那样实施指数退避是正确的做法。
谷歌在计算请求数方面并不完美,因此您自己计算请求并没有真正的帮助。有时你可以每秒处理 15 个请求,但有时你只能得到 7 个请求。
您还应该记住,您正在与使用该服务器的其他人一起完成,如果服务器上有很多负载,您的一个请求可能需要更长的时间,而另一个则可能不需要。不要在大多数人设置要提取的 cron 作业的时间运行。
注意:如果您进入 Google 开发者控制台,在启用了驱动器 API 的位置下,请进入配额选项卡,然后单击旁边的铅笔图标
每个用户每 100 秒的查询次数
和
每 100 秒的查询数
您可以同时增加它们。一种是基于用户的,另一种是基于项目的。每个用户可以在 100 秒内发出 X 个请求,而您的项目每 100 秒可以发出 Y 个请求。
注意:不知道你可以设置多高。这是我的开发帐户,因此它可能有一些我不记得的测试版访问权限。
归档时间: |
|
查看次数: |
1576 次 |
最近记录: |