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

Streamlit应用中简单GET请求耗时过长问题及API调用方法咨询

Streamlit应用中简单GET请求耗时过长问题及API调用方法咨询

先来看你提供的代码:

import requests

url = "https://jsonplaceholder.typicode.com/posts"
print("Getting response")
response = requests.get(url)

if response.status_code == 200:
    print("Response OK!")
    print(response.json())  # Print the returned JSON data
else:
    print(f"Failed to fetch data. Status code: {response.status_code}")

你遇到的问题挺典型的,用streamlit run app.py运行时感觉请求耗时极长还看不到输出,但直接用python app.py秒完成,主要有几个原因和对应的解决办法:

问题根源分析

  1. 输出位置不对:Streamlit里的print()内容只会显示在启动Streamlit的终端控制台,而不是浏览器的应用界面里,所以你在网页上看不到任何反馈,可能误以为请求还在处理。
  2. 重复执行请求:Streamlit的运行机制是每次页面刷新、组件交互都会重新执行整个脚本,如果你没做缓存,每次都会重新发起API请求(不过正常这个接口不会耗时10分钟,大概率是你看不到输出导致的误解)。

正确的Streamlit API调用写法

给你调整一下代码,适配Streamlit的运行逻辑,同时解决看不到输出和重复请求的问题:

import requests
import streamlit as st

# 用缓存装饰器缓存API结果,避免每次重跑都调用接口
@st.cache_data(ttl=3600)  # ttl设置缓存有效期,这里是1小时,到期自动刷新
def fetch_api_data():
    url = "https://jsonplaceholder.typicode.com/posts"
    st.info("正在请求数据...")  # 在网页上显示加载状态
    try:
        # 添加超时设置,避免无限等待
        response = requests.get(url, timeout=10)
        response.raise_for_status()  # 捕获HTTP错误
        return response.json()
    except requests.exceptions.RequestException as e:
        st.error(f"请求出错:{str(e)}")
        return None

# 应用主逻辑
st.title("API数据获取演示")
api_data = fetch_api_data()

if api_data:
    st.success("数据获取成功!")
    # 在网页上展示JSON数据,Streamlit会自动格式化显示
    st.write("返回的数据:")
    st.json(api_data)

额外的排查和优化建议

  • 检查网络状态:先直接用浏览器访问https://jsonplaceholder.typicode.com/posts,确认能快速返回结果,排除本地网络问题。
  • 升级Streamlit版本:旧版本可能存在一些兼容性或性能问题,执行pip install --upgrade streamlit升级到最新版试试。
  • 处理异常情况:上面的代码加了异常捕获,能帮你快速定位是超时、网络错误还是API本身的问题。

备注:内容来源于stack exchange,提问作者Gaurav Agarwal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 15:02:59