Google Colab启用gevent调试时grequests导入警告解决方案咨询
问题表现
在Colab笔记本中使用grequests库,导入库并通过gevent.monkey执行猴子补丁操作后,程序会随机多次输出如下警告:
检测到当前正在使用gevent猴子补丁,请设置以下环境变量:
GEVENT_SUPPORT=True
以在调试器中启用gevent支持。
网上通用的解决方案是执行代码import os; os.environ["GEVENT_SUPPORT"] = "True",但实测无法解决问题。
核心原因
在Python代码中通过os.environ设置GEVENT_SUPPORT不生效的原因是:Colab内置的pydevd调试器会在内核启动阶段、用户代码开始执行前就完成环境变量读取与gevent兼容性检测,等执行到你写的环境变量赋值代码时,检测逻辑已经运行完毕,自然不会识别到参数。
这个警告本身仅为调试器兼容性提示,不会影响grequests、gevent的实际运行逻辑,不会导致并发请求报错,如果不在意提示内容可以直接忽略。
可行解决方法
提前通过IPython魔术命令注入环境变量
把如下代码放在笔记本第一个执行的代码单元格最顶部,不要和其他导入语句混写。%env是IPython提供的内核级环境变量设置命令,生效时机远早于普通Python代码的os赋值:%env GEVENT_SUPPORT=True from gevent import monkey monkey.patch_all(thread=False, select=False) import grequests写完后重启笔记本内核,从头运行所有单元格即可消除警告。
过滤特定警告
如果不想重启内核,或是方法1仍有偶发提示,可以直接通过Python内置的warnings模块屏蔽这条特定警告,不会影响其他正常警告的输出,代码放在猴子补丁执行完成后、导入grequests之前即可:from gevent import monkey monkey.patch_all(thread=False, select=False) import warnings warnings.filterwarnings("ignore", message=".*检测到当前正在使用gevent猴子补丁.*") import grequests关闭调试器兼容性检测
如果你本身不需要在Colab中使用断点调试功能,可以直接在笔记本的设置-调试器选项中关闭第三方库兼容性检测,从根源上关闭这条警告的触发逻辑。
内容的提问来源于stack exchange,提问作者Mikkel Jensen

