编程语言
首页 > 编程语言> > python – 一些请​​求后超过了用户速率限制

python – 一些请​​求后超过了用户速率限制

作者:互联网

我通过pydrive使用Google Drive API在两个Google云端硬盘帐户之间移动文件.我一直在测试一个包含16个文件的文件夹.我的代码总是在第六个文件中引发错误

“User rate limit exceeded”>

我知道请求数量有限制(10 / s或1000 / 100s),但我已尝试使用Google Drive API建议的exponential backoff来处理此错误.即使在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

我尝试使用“批处理请求”来复制文件,但它会为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()

有人有任何提示吗?

编辑:
根据谷歌的支持:

Regarding your User rate limit exceeded error, is not at all related to the per-user rate limit set in the console. Instead it is coming from internal Google systems that the Drive API relies on and are most likely to occur when a single account owns all the files within a domain.
We don’t recommend that a single account owns all the files, and instead have individual users in the domain own the files. For transferring files, you can check this link. Also, please check this link on the recommendations to avoid the error.

解决方法:

403: User Rate Limit Exceeded基本上是防洪.

{
 "error": {
  "errors": [
   {
    "domain": "usageLimits",
    "reason": "userRateLimitExceeded",
    "message": "User Rate Limit Exceeded"
   }
  ],
  "code": 403,
  "message": "User Rate Limit Exceeded"
 }
}

你需要放慢速度.正如您所做的那样实施指数退避是正确的行动方案.

谷歌在计算请求时并不完美,因此自己计算这些请求实际上并没有帮助.有时你可以在第二次获得15次请求时,你只能获得7次.

您还应该记住,如果服务器上有很多负载,您正在与使用服务器的其他人完成您的一个请求可能需要更长时间,而另一个可能不会.不要在大多数人设置提取的cron作业的时候运行.

注意:如果您转到google开发者控制台,您已启用驱动器API到达配额选项卡,请单击旁边的铅笔图标

Queries per 100 seconds per user

Queries per 100 seconds

你可以增加它们.一个是基于用户,另一个是基于项目.每个用户可以在100秒内发出X请求,您的项目可以每100秒发出Y请求.

enter image description here

注意:不知道你可以设置多高.这是我的开发帐户,所以它可能有一些我无法记住的测试版访问权限.

标签:python,google-api,google-drive-sdk,google-api-python-client,pydrive
来源: https://codeday.me/bug/20190522/1154441.html