Python监听Firestore数据时读取用量统计异常显示3次求助
Firestore快照监听统计3次读取的原因说明
你当前的代码本身没有逻辑错误,统计到3次读取是Firestore SDK的默认机制和操作行为导致的正常情况,核心原因如下:
- 监听器首次挂载时,SDK会主动拉取1次目标文档的最新快照返回给回调函数,这是第1次读取
- Python版Firestore SDK初始化监听器的阶段,会自动触发2次后台健康检查读取:用于校验账号权限、连接通道可用性、监听器是否挂载成功,这两次读取由SDK底层触发,上层代码无感知,加起来刚好3次
- 额外排查方向:如果你运行代码期间连续重启了3次进程,每次重启重新挂载监听器都会产生1次初始读取,累计也会得到3次的统计结果;如果监听器运行期间目标文档被修改了2次,每次修改的推送也会各算1次读取,加起来也是3次
验证方法
- 保持当前代码运行10分钟以上,期间不要修改
user/com文档,观察Firebase控制台的读取量:如果只有初始的3次,后续没有新增读取,属于完全正常的情况,无需修改代码 - 如果后续读取量还在持续增长,排查是否存在代码重复初始化、重复挂载监听器的问题,比如在循环、多进程/多线程逻辑中反复执行了
on_snapshot挂载代码
可选优化方案
可以给回调函数加异常处理,避免连接波动重试时产生不必要的重复读取,修改后的回调代码如下:
def on_snapshot(doc_snapshot, changes, read_time): try: for doc in doc_snapshot: if doc.exists: print(u'Received document snapshot: {}'.format(doc.to_dict().get('request', '字段不存在'))) except Exception as e: print(f"快照处理出错: {e}")
如果不需要长期监听,调用doc_watch.unsubscribe()主动释放监听器即可,避免后台残留连接产生多余读取。
内容的提问来源于stack exchange,提问作者ForteD
相关产品推荐
相关产品推荐

