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

Streamlit使用GoogleNews模块时如何等待前序操作完成再执行后续代码

解决方案

出现该问题的核心原因是GoogleNews库的搜索、拉取新闻操作为异步执行,不会阻塞后续代码运行,同时也可能存在Streamlit脚本重运行机制导致的执行流程混乱问题,可通过以下方案解决:

方案1:轮询检测加载状态(最通用)

不使用固定时长的time.sleep(),改为循环检测结果是否返回,同时设置最大超时时间避免无限等待:

import time
import streamlit as st

# 执行搜索、拉取新闻操作
googlenews.search(inputt.iloc[0,0])
googlenews.get_news(inputt.iloc[0,0])

# 轮询获取结果,最大等待30秒
max_wait_seconds = 30
start_time = time.time()
result_0 = []

while len(result_0) == 0 and (time.time() - start_time) < max_wait_seconds:
    result_0 = googlenews.page_at(1)
    time.sleep(0.5) # 每次查询间隔0.5秒,避免请求频率过高触发反爬

# 后续判断逻辑
if len(result_0) == 0:
    st.error("请求超时或未搜索到相关新闻,请重试")

方案2:适配异步调用逻辑

如果你使用的是异步版本的GoogleNews依赖库,可通过async/await确保操作完成后再返回结果,Streamlit原生支持异步函数执行:

import asyncio
import streamlit as st

async def get_news_data(keyword):
    await googlenews.search(keyword)
    await googlenews.get_news(keyword)
    return await googlenews.page_at(1)

result_0 = asyncio.run(get_news_data(inputt.iloc[0,0]))

if len(result_0) == 0:
    st.error("未搜索到相关新闻")

方案3:适配Streamlit重运行机制

Streamlit每次用户交互都会重跑全量脚本,可通过st.session_state缓存执行状态与结果,避免重复执行或逻辑跳转:

import time
import streamlit as st

# 初始化状态标记
if "news_load_done" not in st.session_state:
    googlenews.search(inputt.iloc[0,0])
    googlenews.get_news(inputt.iloc[0,0])
    
    max_wait_seconds = 30
    start_time = time.time()
    st.session_state.result_0 = []
    
    while len(st.session_state.result_0) == 0 and (time.time() - start_time) < max_wait_seconds:
        st.session_state.result_0 = googlenews.page_at(1)
        time.sleep(0.5)
    
    st.session_state.news_load_done = True

# 直接使用缓存的结果执行判断
if len(st.session_state.result_0) == 0:
    st.error("未获取到有效新闻数据")

注意事项

  • 可根据实际业务需求调整最大等待时长,避免用户等待过久
  • 轮询间隔不建议低于0.3秒,防止请求频率过高触发Google的反爬限制
  • 若超时概率较高,可增加最多3次的重试逻辑,失败后重新发起搜索请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:15:02