New submission from Serhiy Storchaka:

Currently tuples creating uses free lists. But this optimization is not enough. 
When reuse cached tuple for arguments of repeatedly called functions, the 
performance of some builtins can be significantly increased.

$ ./python -m timeit -s "f = lambda x: x" -s "s = list(range(1000))" -- 
"list(filter(f, s))"
Unpatched: 1000 loops, best of 3: 773 usec per loop
Patched:   1000 loops, best of 3: 558 usec per loop

$ ./python -m timeit -s "f = lambda x: x" -s "s = list(range(1000))" -- 
"list(map(f, s))"
Unpatched: 1000 loops, best of 3: 689 usec per loop
Patched:   1000 loops, best of 3: 556 usec per loop

$ ./python -m timeit -s "f = lambda x: x" -s "s = list(range(1000))" -- 
"sorted(s, key=f)"
Unpatched: 1000 loops, best of 3: 758 usec per loop
Patched:   1000 loops, best of 3: 550 usec per loop

The same effect can be achieved for itertools functions.

I don't propose to commit this complicated patch, but these results can be used 
as a guide to the optimization of tuple creating. It is surprising to me that 
this patch has any effect at all.

----------
components: Interpreter Core
files: reuse_argtuples.patch
keywords: patch
messages: 236480
nosy: serhiy.storchaka
priority: normal
severity: normal
status: open
title: Tuple creation is two slow
type: performance
versions: Python 3.5
Added file: http://bugs.python.org/file38223/reuse_argtuples.patch

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue23507>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to