Mac M1运行Python调用Google Sheets API读取数据过慢如何解决
问题成因
- IPv6优先级问题:M1系列Mac默认在双栈网络环境下优先走IPv6链路,国内多数运营商的IPv6网络对Google API的路由连通性差、丢包率高,请求会多次重试超时后才切回IPv4链路,是耗时过长的核心原因。Windows系统默认IPv4优先级更高,因此不会触发该问题。
- 依赖库兼容性问题:旧版本的gspread及其依赖的urllib3、cryptography等库未适配Apple Silicon架构,会通过Rosetta 2转译运行,SSL握手、加密解密环节的性能损耗叠加网络重试的时间,会进一步拉长请求耗时。
- DNS解析异常:M1 Mac内置的mDNSResponder服务偶尔会缓存Google API域名的大量无效IPv6解析结果,每次请求都会先尝试无效地址,拖慢整个请求流程。
可行解决方案
- 强制Python请求优先使用IPv4:在脚本的所有import逻辑前插入以下代码,覆盖默认的地址解析逻辑,直接走IPv4链路:
import socket # 强制所有socket请求优先使用IPv4 original_getaddrinfo = socket.getaddrinfo def ipv4_only_getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): return original_getaddrinfo(host, port, socket.AF_INET, type, proto, flags) socket.getaddrinfo = ipv4_only_getaddrinfo
- 升级所有依赖到Apple Silicon适配版本:执行以下命令升级相关库,确保使用原生ARM架构编译的版本,避免转译损耗:
pip install --upgrade gspread oauth2client urllib3 requests cryptography - 优化API调用参数:如果只需要读取表格的数值内容,将
get_all_records()替换为get_all_values(),后者不会拉取格式、公式等冗余数据,返回数据量可减少60%以上。 - 手动绑定hosts解析:找到可正常连通的
sheets.googleapis.com的IPv4地址,添加到/etc/hosts文件中,跳过DNS解析的无效寻址环节。
内容的提问来源于stack exchange,提问作者haymovich
相关产品推荐
相关产品推荐

