Mac本地运行Google Ads API Python客户端时gRPC next_event调用极慢
排查Mac本地Google Ads API gRPC延迟问题
核心现象
本地运行Google Ads API Python客户端时突然出现严重延迟,哪怕是拉取广告系列名称这类基础GAQL查询也受影响。通过cProfile分析发现,grpc._cython.cygrpc.SegregatedCall的next_event方法单次调用耗时8-10秒。相同代码在其他机器运行正常,更换Python、google-ads及gRPC版本后问题仍存在。
性能分析数据:
ncalls tottime percall cumtime percall filename:lineno(function) 1 8.123 8.123 8.126 8.126 {method 'next_event' of 'grpc._cython.cygrpc.SegregatedCall' objects}
本地环境排查步骤
1. 检查网络配置
- 关闭VPN/代理工具:全局代理或VPN的路由规则往往会导致gRPC请求卡住,完全退出后再测试API调用。
- 切换网络环境:比如从公司内网切到家用Wi-Fi或手机热点,排除本地DNS解析、路由转发的问题。
- 用
grpcurl测试连通性:直接调用Google Ads API端点验证基础gRPC连接是否延迟:
如果这个命令也慢,说明是本地到Google gRPC服务的网络链路问题,和代码无关。grpcurl -plaintext googleads.googleapis.com:443 list google.ads.googleads.v14.services.GoogleAdsService
2. 排查防火墙与安全软件
- 临时关闭系统防火墙:打开「系统设置」→「网络」→「防火墙」,关闭后测试,部分防火墙规则会拦截gRPC的HTTP/2流量,导致握手延迟。
- 退出第三方安全工具:比如CleanMyMac、Little Snitch这类工具的网络监控规则可能误判gRPC请求,暂时退出后再测试。
3. 重置DNS缓存
Mac DNS缓存损坏可能导致域名解析延迟,执行以下命令重置:
# macOS Ventura及以上版本 sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder # 旧版本macOS sudo killall -HUP mDNSResponder
执行后重启终端,重新运行API代码。
4. 调整gRPC的HTTP/2配置
gRPC默认使用HTTP/2,本地环境可能存在兼容性问题,可临时强制切换到HTTP/1.1测试:
import os os.environ['GRPC_ENABLE_FORK_SUPPORT'] = '0' os.environ['GRPC_HTTP2_MAX_PINGS_WITHOUT_DATA'] = '0' os.environ['GRPC_USE_CUSTOM_SELECTOR'] = 'false'
如果切换后延迟消失,说明是HTTP/2在本地环境的兼容性问题。
5. 检查系统资源占用
- 打开「活动监视器」:查看CPU、内存、磁盘IO的占用情况,若有杀毒软件、备份工具等进程占用大量资源,会导致gRPC线程被阻塞。
- 检查端口占用:用
lsof查看443端口是否被异常进程持有:lsof -i :443
6. 重建干净的Python虚拟环境
即使更换过版本,旧虚拟环境可能有残留依赖干扰,重新创建干净环境:
rm -rf venv/ python3 -m venv venv source venv/bin/activate pip install google-ads # 安装指定版本
7. 更新Mac系统
部分旧版本macOS存在网络栈或Cython兼容性问题,尝试更新到最新稳定版系统后再测试代码。
内容的提问来源于stack exchange,提问作者Adam Walters
相关产品推荐
相关产品推荐

