如何在Odoo社区版标准代码库中进行性能分析?
解决Odoo标准模块添加@profile装饰器无输出的问题
问题场景
自定义模块中使用from odoo.tools.profiler import profile并给方法添加@profile装饰器,更新模块后能正常输出性能分析结果;但修改Odoo社区版标准模块(如stock.picking的write方法)添加相同装饰器后,终端无任何输出。当前启动命令为:
python odoo-bin -r xxx -w xxx --addons-path=odoo/addons,odoo/custom_addons -d OdooDB -u stock
必要的额外操作
1. 确保Odoo加载你修改的标准模块源码
如果你的Odoo是通过pip安装的,系统默认会从site-packages目录的Odoo包加载代码,你本地修改的odoo/addons目录源码不会生效。解决方式:
- 启动时将你修改的标准模块所在目录放在
--addons-path的最前端,确保优先加载修改后的版本:python odoo-bin -r xxx -w xxx --addons-path=/path/to/your/modified/odoo/addons,odoo/custom_addons -d OdooDB -u stock - 直接使用源码版Odoo启动,避免依赖pip安装的包。
2. 强制重载模块代码
仅用-u stock更新模块可能不会触发代码重载(模块版本号未变更时更明显),需:
- 停止Odoo服务,删除对应模块的
.pyc编译文件(如odoo/addons/stock/models/*.pyc),再重启并更新模块。 - 启动时添加
--dev reload参数开启开发模式,自动重载修改后的代码:python odoo-bin -r xxx -w xxx --addons-path=odoo/addons,odoo/custom_addons -d OdooDB -u stock --dev reload
3. 显式初始化profiler
标准模块的方法可能在profiler初始化前就被加载,导致装饰器未生效。启动时添加--profiler参数确保profiler提前初始化:
python odoo-bin -r xxx -w xxx --addons-path=odoo/addons,odoo/custom_addons -d OdooDB -u stock --profiler
4. 验证目标方法是否被调用
确保你实际触发了stock.picking的write方法(比如后台编辑并保存拣货单),方法未被调用自然不会有输出。
总结
核心问题大多是标准模块源码未被正确加载或代码未被重载,按上述步骤调整后,即可正常输出目标方法的性能分析结果。
内容的提问来源于stack exchange,提问作者holydragon
相关产品推荐
相关产品推荐

