BUG建议:streamlit Thread ‘MainThread‘: missing ScriptRunContext!

报错信息

streamlit Thread 'MainThread': missing ScriptRunContext!

原因

streamlit包引起

建议

注释掉streamlit包相关语句
用tqdm,不要用streamlit

pip install tqdm
from tqdm import tqdm
在SoundDevice库中,当你试图通过`st.info()`在非主线程(如录音线程)中更新Streamlit信息时,会遇到`ScriptRunContext`缺失的警告。这是因为`st.info()`通常是在主线程中调用的,以保证与UI的交互。解决这个问题的方法是确保在主线程中更新状态,或者使用异步机制。 当需要停止录音线程时,由于`sd.stop()`应该在一个可以捕获异常的地方执行,以防止影响整个程序,你不能简单地在`try- 使用全局变量`stop_or_rec`来标记是否应停止录音。 ```python if stop_or_rec_confirm and stop_or_rec: # 确保在主线程中修改这个全局变量 with mutex: # 使用锁确保同步操作 sd.stop() stop_or_rec = False # 设置为False以避免重复尝试停止 st.info("正在停止录音") # 在主线程中安全地更新状态 ``` 2. **处理录音完成后的回调**: - 当录音结束后,在主线程中处理音频文件的保存逻辑,而不是在`except`块中。 ```python def on_recording_done(): try: audio_data[:] = [item for item in audio_data if not isinstance(item, bool)] combined_array = np.vstack(audio_data) sf.write(filename, combined_array, fs, subtype='PCM_16') st.success("录音完成!已保存为 {}".format(filename)) except: st.error("保存出错") finally: mutex.release() if stop_or_rec_confirm: sd.recorder.callback = on_recording_done # 设置录音完成后触发回调 # 如果你想立即停止并保存,可以在on_recording_done内部检查stop_or_rec ``` 这样,你可以确保在适当的时候更新UI,并在录音线程完成后安全地处理音频数据。请注意,为了完全避免`ScriptRunContext`警告,你可能还需要确保其他跨线程的操作都在合适的地方执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值