【问题标题】:Python requests lib is taking way longer than it should to do a get requestPython requests lib 花费的时间比它应该做的 get 请求要长
【发布时间】:2023-04-03 08:23:01
【问题描述】:

所以我有这个代码。每当我运行代码并到达第 3 行时,执行 get 请求大约需要 20 秒。没有理由花这么长时间,而且每次都花很长时间。有什么帮助吗?

def get_balance(addr):
try:
    r = requests.get("http://blockexplorer.com/api/addr/"+addr+"/balance")
    return int(r.text)/10000000
except:
    return "e"

【问题讨论】:

  • 我有同样的问题,只是意识到网站有某些 IP 限制,
  • @ovicko 加载到我的浏览器不需要很长时间?
  • 他们可能会歧视您的用户代理。
  • 你在脚本和浏览器中加载它的频率如何?如果您在短时间内执行许多请求,它可能会阻塞 - 即。 1 秒内 1000 个请求。您应该向门户网站的管理员询问此问题。
  • @ovicko 我尝试了不同的 URL 并将 chrome 用户代理添加到标题中,但仍然需要很长时间(比如 20 秒)。

标签: python python-3.x get python-requests


【解决方案1】:

它大部分时间都对我有用。

>>> def get_balance(addr):
...   try:
...       start = time.time()
...       r = requests.get("http://blockexplorer.com/api/addr/"+addr+"/balance")
...       end = time.time()
...       print(f"took {end - start} seconds")
...       print(r.text, "satoshis")
...       return int(r.text)/100000000
...   except:
...       return "e"
...
>>>
>>> get_balance("1HB5XMLmzFVj8ALj6mfBsbifRoD4miY36v")
took 0.7754228115081787 seconds
151881086 satoshis
15.1881086

但如果我连续多次这样做,我偶尔会收到错误“比特币 JSON-RPC:超出工作队列深度。代码:429”

像我一样打印出 r.text,这可能会显示来自 Block Explorer 的错误消息。可能是他们开始限制你的速率了。

【讨论】:

  • 这是一个怎样的答案?这不能回答我的问题。同样有趣的是,当在我的 vps 而不是我的开发计算机上运行时,20 秒的等待时间已经过去了。
  • 我用 time 制作了类似的程序并运行了 100 次 - 它给了我相似的时间 0.3 - 1.0 :)
  • @Qwerty,当你打印出 r.text 时你会得到什么?
  • @Mr.Me 我得到了承诺的余额,但仍然需要至少 20 秒才能完成请求
  • 如果您在浏览器中执行请求,是否需要 20 秒才能完成请求?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-07
  • 1970-01-01
  • 2016-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多