gevent属性错误求助:重装后出现AttributeError类问题排查
解决重装BEMOSS/Volttron后出现的gevent相关异常
嘿,我一眼就看出这是gevent版本不兼容的问题——你重装后应该是自动安装了最新版的gevent,但你的BEMOSS/Volttron代码是基于旧版gevent的API写的,所以才会出现这两个AttributeError。
先把你遇到的具体错误贴出来,方便其他遇到同样问题的人参考:
Traceback (most recent call last): File "src/gevent/greenlet.py", line 705, in gevent._greenlet.Greenlet.run File "/home/tinker/a/BEMOSS/volttron/platform/auth.py", line 147, in zap_loop time = gevent.core.time AttributeError: 'module' object has no attribute 'core' 2018-05-16T05:19:17Z <Greenlet "Greenlet-0" at 0xb436e360L: <bound method AuthService.zap_loop of <volttron.platform.auth.AuthService object at 0xb4371b30>>>(<volttron.platform.vip.agent.core.Core object at 0)> failed with AttributeError 2018-05-16 05:19:17,340 () volttron.platform.main DEBUG: In-process VIP router bound to inproc://vip 2018-05-16 05:19:17,341 () volttron.platform.main DEBUG: Local VIP router bound to ipc://@/home/tinker/.volttron/run/vip.socket?domain=vip#bdc8ff59-e99b-4629-b6b7-df00ffc8cc44 2018-05-16 05:19:17,441 () volttron.platform.main DEBUG: protected topics file /home/tinker/.volttron/protected_topics.json 2018-05-16 05:19:17,497 () volttron.platform.main INFO: loading protected-topics file /home/tinker/.volttron/protected_topics.json 2018-05-16 05:19:17,498 () volttron.platform.main INFO: protected-topics file /home/tinker/.volttron/protected_topics.json loaded 2018-05-16 05:19:17,503 () volttron.platform.web INFO: Web server not started. 2018-05-16 05:19:17,505 () volttron.platform.vip.agent.core ERROR: unhandled exception in periodic callback Traceback (most recent call last): File "/home/tinker/a/BEMOSS/volttron/platform/vip/agent/core.py", line 124, in _loop method(*self.args, **self.kwargs) File "/home/tinker/a/BEMOSS/volttron/platform/vip/agent/subsystems/heartbeat.py", line 160, in publish self.pubsub().publish('pubsub', topic, headers, message) File "/home/tinker/a/BEMOSS/volttron/platform/vip/agent/subsystems/pubsub.py", line 396, in publish message=message, bus=bus) File "/home/tinker/a/BMEOSS/volttron/platform/vip/agent/subsystems/rpc.py", line 303, in call request, result = self._dispatcher.call(method, args, kwargs) File "/home/tinker/a/BEMOSS/volttron/platform/vip/agent/subsystems/rpc.py", line 115, in call result = next(self._results) File "/home/tinker/a/BEMOSS/volttron/platform/vip/agent/results.py", line 85, in next result.ident = ident = '%s.%s' % (next(self._counter), hash(result)) AttributeError: 'gevent._event.AsyncResult' object has no attribute 'ident' 2018-05-16 05:19:17,520 () volttron.platform.vip.agent.core ERROR: unhandled exception in periodic callback
错误原因拆解
gevent.core模块消失:新版本gevent重构了内部结构,把gevent.core的API移到了gevent主模块或者gevent.hub里,所以代码里调用gevent.core.time就会报错。AsyncResult.ident属性移除:同样是gevent版本更新导致的API变更,旧版里的ident属性在新版中被移除了,但Volttron的results.py还在尝试访问这个属性。
快速修复步骤
因为你是重装后出现的问题,肯定是pip自动拉了最新版gevent,只要回退到兼容的旧版本就行:
- 先卸载当前的gevent:
pip uninstall -y gevent - 安装和你的BEMOSS/Volttron兼容的版本,根据这个错误的常见情况,gevent 1.2.2是最稳妥的选择:
pip install gevent==1.2.2 - 重启你的BEMOSS/Volttron服务,这两个错误应该就会消失了。
额外建议
如果安装1.2.2还是有问题,去看看你的项目根目录下的requirements.txt文件,里面应该明确写了各个依赖的版本号,严格按照那个列表安装就能避免版本冲突。另外,以后重装的时候最好用虚拟环境,把项目依赖和全局环境隔离开,就不会出现这种莫名其妙的版本问题了。
内容的提问来源于stack exchange,提问作者Akshay
相关产品推荐
相关产品推荐

