odoo @profile 性能测试

Odoo @profile 性能测试

odoo rst 文档

Another profiler can be used to log statistics on a method:

1
2
3
4
5
from odoo.tools.profiler import profile
[...]

@api.model
def (...):

The statistics will be displayed into the logs once the method to be analysed is
completely reviewed.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2018-03-28 06:18:23,196 22878 INFO openerp odoo.tools.profiler:
calls queries ms
project.task ------------------------ /home/odoo/src/odoo/addons/project/models/project.py, 638

1 0 0.02 @profile
@api.model
def create(self, vals):
# context: no_log, because subtype already handle this
1 0 0.01 context = dict(self.env.context, mail_create_nolog=True)

# for default stage
1 0 0.01 if vals.get('project_id') and not context.get('default_project_id'):
context['default_project_id'] = vals.get('project_id')
# user_id change: update date_assign
1 0 0.01 if vals.get('user_id'):
vals['date_assign'] = fields.Datetime.now()
# Stage change: Update date_end if folded stage
1 0 0.0 if vals.get('stage_id'):
vals.update(self.update_date_end(vals['stage_id']))
1 108 631.8 task = super(Task, self.with_context(context)).create(vals)
1 0 0.01 return task

Total:
1 108 631.85

@profile 用法

1
2
3
4
5
6
7
8

from odoo.tools.profiler import profile
...
# 添加装饰器
@api.model_create_multi
@profile
def create(self, vals_list):
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!-- 输出结果 -->
2019-10-30 14:41:29,185 6884 INFO 1029 odoo.tools.profiler:
calls queries ms
res.users --------------------------- /opt/odoo/./core/odoo/addons/base/models/res_users.py, 474

1 0 0.02 @api.model_create_multi
@profile
def create(self, vals_list):
1 56 313.6 users = super(Users, self).create(vals_list)
3 0 0.04 for user in users:
1 2 9.17 user.partner_id.write({'company_id': user.company_id.id, 'active': user.active})
1 0 0.0 return users

Total:
1 58 322.84