首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >HTTPError: 429客户端错误: IBM Cloudant with python上的请求太多

HTTPError: 429客户端错误: IBM Cloudant with python上的请求太多
EN

Stack Overflow用户
提问于 2018-03-29 01:55:06
回答 3查看 1.6K关注 0票数 0

IBM Cloudant连接到Jupyter notebook。我可以与不是很大的数据库工作。但是当我想要从有很多数据的数据库中获取数据时,我会得到这个错误:

HTTPError: 429客户端错误:请求太多too_many_requests您已经超过了当前对查询类每秒5个请求的限制。请稍后再试

有什么办法解决这个问题吗?任何想法都会很有帮助。

下面是我的代码:

代码语言:javascript
复制
from cloudant.client import Cloudant
from cloudant.error import CloudantException
from cloudant.result import Result, ResultByKey
import cloudant
import pandas as pd
import json

serviceUsername = "x"
servicePassword = "y"
serviceURL = "z"
client = Cloudant(serviceUsername, servicePassword, url=serviceURL)
client.connect()

database1 = client['comfort']
userID= input("what is your user ID?")

for item in database1:
  if userID == 'user_id':
    print(item)

下面是我得到的结果

代码语言:javascript
复制
what is your user ID?ss


> HTTPError                                 Traceback (most recent call
> last)
>     <ipython-input-7-98e9b2d333f5> in <module>()
>           4 userID= input("what is your user ID?")
>           5 
>     ----> 6 for item in database1:
>           7     if userID == 'user_id':
>           8         print(item)
>     
>     ~\Anaconda3\lib\site-packages\cloudant\database.py in __iter__(self, remote)
>         634                                                   # next_startkey
>         635                     include_docs=True,
>     --> 636                     startkey=next_startkey
>         637                 ).get('rows', [])
>         638 
>     
>     ~\Anaconda3\lib\site-packages\cloudant\database.py in all_docs(self, **kwargs)
>         391                         '/'.join([self.database_url, '_all_docs']),
>         392                         self.client.encoder,
>     --> 393                         **kwargs)
>         394         return resp.json()
>         395 
>     
>     ~\Anaconda3\lib\site-packages\cloudant\_common_util.py in get_docs(r_session, url, encoder, headers, **params)
>         263     else:
>         264         resp = r_session.get(url, headers=headers, params=f_params)
>     --> 265     resp.raise_for_status()
>         266     return resp
>         267 
>     
>     ~\Anaconda3\lib\site-packages\requests\models.py in raise_for_status(self)
>         933 
>         934         if http_error_msg:
>     --> 935             raise HTTPError(http_error_msg, response=self)
>         936 
>         937     def close(self):
>     
>     HTTPError: 429 Client Error: Too Many Requests too_many_requests You've exceeded your current limit of 5 requests per second for query
> class. Please try later. for url:
> https://2b5a4b.......
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-29 02:02:53

尝试像这样查询:

代码语言:javascript
复制
database1 = client['comfort']
userID= input("what is your user ID?")

selector = {'user_id': {'$eq': userID}}
docs = database1.get_query_result(selector)
for doc in docs:
    do stuff...

这是直接从the docs得到的

票数 1
EN

Stack Overflow用户

发布于 2018-06-12 05:50:35

因此,对此的实际明确答案是在连接中添加一个所谓的Replay429Adapter。

这将负责捕获HTTP429错误,并重试和调整连接,以减轻Cloudant Lite计划对IBM Cloud的每秒5次查询的直接影响。

一旦您知道要寻找什么,这实际上是有文档记录的:

https://python-cloudant.readthedocs.io/en/latest/getting_started.html?highlight=Replay429Adapter您需要添加:from cloudant.adapters import Replay429Adapter,然后将,adapter=Replay429Adapter(retries=10, initialBackoff=0.01))添加到创建的Cloudant客户端连接器中

另请参阅https://github.com/cloudant/python-cloudant/issues/249

票数 0
EN

Stack Overflow用户

发布于 2020-02-29 00:50:10

添加Replay429Adapter是此错误的正确解决方案,也是一个真正有弹性的客户端。

我的客户端连接如下所示(使用IAM身份验证):

代码语言:javascript
复制
from cloudant.client import Cloudant
from cloudant.adapters import Replay429Adapter
db_client = Cloudant.iam(cloudant_username, cloudant_apikey, connect=True, adapter=Replay429Adapter(retries=10, initialBackoff=0.01))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49541162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档