【yfinance BUG】YFRateLimitError(‘Too Many Requests. Rate limited. Try after a while.’)

问题:
y_x_df_raw = yf.download([‘AAPL’,‘^GSPC’], start=‘2020-01-01’, end=‘2020-12-31’)
YFRateLimitError(‘Too Many Requests. Rate limited. Try after a while.’)

环境:
yfinance 0.2.54 (2025-03-12)
是目前最新的版本

yf.__version__

解决:打开代理,然后添加以下代码

import os
proxy = 'http://127.0.0.1:1083'	# 代理设置,此处修改
os.environ['HTTP_PROXY'] = proxy 
os.environ['HTTPS_PROXY'] = proxy 

PS. 如何查看proxy
参考:https://blog.csdn.net/qq_55888300/article/details/131498092
路径:控制面板\网络和 Internet\Internet属性\连接\局域网(LAN)设置
在这里插入图片描述

### 处理 Too Many RequestsRate Limited 错误 为了应对 API 请求过于频繁导致的 `Too Many Requests` 或者 `RateLimitedError`,可以采取多种策略来优化请求流程并遵循 API 提供商设定的速率限制。 #### 实施延迟和重试逻辑 通过引入合理的等待时间间隔,在每次发送新请求之前暂停片刻能够有效降低单位时间内发出的请求数量。这不仅有助于避开触发限流机制的风险,同时也是一种良好的编程实践[^1]。 ```python import time def fetch_data_with_delay(api_endpoint, delay_seconds=0.5): try: response = requests.get(api_endpoint) response.raise_for_status() return response.json() except Exception as e: print(f"Encountered an error: {e}") time.sleep(delay_seconds) # Wait before retrying return fetch_data_with_delay(api_endpoint) data = fetch_data_with_delay('https://api.example.com/data') ``` #### 使用批处理技术减少总请求数目 对于需要获取大量数据的情况,尽可能采用批量查询的方式代替多次单独调用。这样可以在单次交互中完成更多工作,从而显著减轻服务器负担[^2]。 #### 应用缓存提高效率 启用本地或分布式缓存可以帮助存储已成功检索到的结果副本。当下一次遇到相同参数的请求时可以直接返回缓存中的内容而无需再次联网获取最新版本的信息。这种方法特别适用于那些短期内不会发生太大变化的数据集。 #### 合理规划并发度 如果应用程序设计允许的话,则可以通过调整最大并发连接数的方式来更好地管理资源分配情况。例如,使用异步I/O库如 `aiohttp` 来实现高效的多任务调度;或者是借助专门工具包像 `concurrent.futures.ThreadPoolExecutor` 控制线程池大小以达到最佳性能平衡点。 ```python from concurrent.futures import ThreadPoolExecutor def process_api_requests(urls, max_workers=5): results = [] with ThreadPoolExecutor(max_workers=max_workers) as executor: future_to_url = { executor.submit(requests.get, url): url for url in urls} for future in futures.as_completed(future_to_url): url = future_to_url[future] try: data = future.result().json() results.append(data) except Exception as exc: print('%r generated an exception: %s' % (url, exc)) return results ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值