You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python拉取数据时如何限制返回小数位数?yahoo_fin股票数据场景示例

问题分析与优化方案

你对性能瓶颈的判断有误,64位浮点数的传输和计算开销极小,不会导致程序运行缓慢。真正的性能瓶颈是你在循环中逐次向雅虎金融接口发起近500次独立HTTP请求,每次请求都需要等待网络响应,串行执行的总耗时自然很高。仅在本地截断2位小数不会减少接口返回的数据量,无法解决速度慢的问题。

优化方案
  • 优先使用批量查询接口:雅虎金融本身支持同时查询多只股票的实时价格,你可以替换get_live_price为批量查询逻辑,一次请求拉取所有标普500成分股的价格,从根源上减少HTTP请求次数,这是效率最高的优化方式。
  • 采用多线程并发请求:如果要继续使用yahoo_fin的现有接口,可以用线程池并发发起请求,利用网络IO等待的空闲时间同时处理多个查询请求,总耗时会大幅下降。优化后的参考代码如下:
from yahoo_fin import stock_info as si
from concurrent.futures import ThreadPoolExecutor

# 最大线程数可根据自身网络情况调整,一般10-20即可
MAX_WORKERS = 15
spy = si.tickers_sp500()
result = []

def check_price(ticker):
    try:
        price = si.get_live_price(ticker)
        # 本地截断为2位小数
        if round(price, 2) < 50.00:
            return ticker
    except Exception:
        # 跳过请求失败的标的
        return None

with ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor:
    for ticker in executor.map(check_price, spy):
        if ticker:
            result.append(ticker)

print(result)
  • 增加异常捕获逻辑:原代码没有处理接口请求失败的情况,部分标的查询报错会直接终止程序,补充异常捕获可以保证脚本稳定运行。

内容的提问来源于stack exchange,提问作者pyhelpwork

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 21:27:05