Skip to content

Instantly share code, notes, and snippets.

@guewen
Last active May 4, 2022 08:38
Show Gist options
  • Save guewen/a4a2eba5d128b4ed3129866f80571fbd to your computer and use it in GitHub Desktop.
Save guewen/a4a2eba5d128b4ed3129866f80571fbd to your computer and use it in GitHub Desktop.
benchmark odoo recordset union
# to run in odoo shell
import timeit
code_recordset = """
result = env['product.product'].browse()
for record in records:
result |= record
"""
code_set = """
result = set()
for record in records:
result.add(record.id)
env['product.product'].browse(result)
"""
timeit.repeat(code_recordset, setup="records = env['product.product'].browse(range(1,1001))", number=100, globals={'env': env})
timeit.repeat(code_set, setup="records = env['product.product'].browse(range(1,1001))", number=100, globals={'env': env})
@tschanzt
Copy link

tschanzt commented Dec 4, 2019

@guewen what version is the second one? seems to be much faster.

@guewen
Copy link
Author

guewen commented Jan 8, 2020

@tschanzt what do you call "second one"?
The much faster version is using a set.

@sebalix
Copy link

sebalix commented Dec 15, 2020

Result on a 13.0:

>>> timeit.repeat(code_recordset, setup="records = env['product.product'].browse(range(1,1001))", number=100, globals={'env': env})
[12.858925580978394, 12.715613184031099, 12.757306319021154, 12.897050590021536, 13.071105225011706]
>>> timeit.repeat(code_set, setup="records = env['product.product'].browse(range(1,1001))", number=100, globals={'env': env})
[0.16186794801615179, 0.1302504469640553, 0.13334446505177766, 0.13309406995540485, 0.1337131999898702]

@sebalix
Copy link

sebalix commented May 4, 2022

Result on a 14.0, same story:

>>> timeit.repeat(code_recordset, setup="records = env['product.product'].browse(range(1,1001))", number=100, globals={'env': env})
[14.343225489006727, 14.607701032000477, 14.82277410599636, 15.232663155999035, 14.98800701899745]
>>> timeit.repeat(code_set, setup="records = env['product.product'].browse(range(1,1001))", number=100, globals={'env': env})
[0.18435767899791244, 0.14919681400351692, 0.15227286599110812, 0.15313698099635076, 0.16125268299947493]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment