本地运行Streamlit集成摘要代码反复报超时错误求助
问题排查与修复方案
你遇到的the write operation timeout错误可从以下几个环节逐一排查修复:
1. 谷歌云存储上传环节超时(最常见诱因)
你的代码中upload_blob方法没有设置超时参数,大体积音频文件上传时很容易触发写入超时,调整方案:
- 给
blob.upload_from_filename方法增加超时配置,修改代码如下:
# 修改upload_blob函数内的上传代码 blob.upload_from_filename(source_file_name, timeout=3600) # 按音频大小可调整为更大值
- 额外检查你的GCS存储桶区域和本地网络的连通性,可提前测试同区域下的小文件上传速度。
2. 谷歌云Speech长时转写超时
你当前设置的operation.result(timeout=10000)是固定等待超时,实际长音频转写建议采用官方默认的轮询机制而非硬设超时,调整方案:
- 去掉固定timeout参数,修改为:
# 替换原response = operation.result(timeout=10000) response = operation.result() # 自动遵循谷歌云默认的长时任务重试/轮询规则
- 若你的音频时长超过60分钟,需确认你开通了谷歌云Speech的长音频转写权限,同时确保上传到GCS的音频文件无损坏。
3. Streamlit服务本身超时
你提到是本地运行的Streamlit应用,Streamlit默认的服务请求超时为300秒,长任务运行时很容易触发超时,调整方案:
- 启动Streamlit时增加超时参数配置,启动命令改为:
streamlit run your_app_name.py --server.timeout 3600
- 建议将音频转写、摘要生成两个重耗时任务改为异步执行,避免阻塞主线程触发超时。
4. 代码逻辑bug修复
你的现有代码存在几处逻辑错误也会间接引发运行异常导致超时:
generate_summary函数末尾缩进错误,你当前把generate_summary()写在了函数内部,会导致无限递归调用,直接卡死程序触发超时,需要把这行代码移到函数外部,按业务逻辑调整调用时机。replaced_tags = data["summary"].replace(...)一行中data变量没有定义,你实际应该用的是生成的summary变量,改为:
replaced_tags = summary[0].replace("<s>","<p>").replace("</s>","</p>")
- 若你的本地设备没有英伟达GPU,
.to("cuda")会报错导致程序异常,建议增加设备判断:
device = "cuda" if torch.cuda.is_available() else "cpu" input_ids = tokenizer(LONG_ARTICLE, return_tensors="pt").input_ids.to(device) model = LEDForConditionalGeneration.from_pretrained("patrickvonplaten/led-large-16384-pubmed", return_dict_in_generate=True).to(device)
内容的提问来源于stack exchange,提问作者Rosheen Abbas
相关产品推荐
相关产品推荐

