[New-bugs-announce] [issue32196] Rewrite plistlib with functional style
Serhiy Storchaka
report at bugs.python.org
Fri Dec 1 14:28:36 EST 2017
New submission from Serhiy Storchaka <storchaka+cpython at gmail.com>:
The proposed PR rewrites the plistlib module using a functional style. This speeds up loading and saving plist files at least by 10%. Saving plist files in XML format have sped up almost twice.
$ ./python -m timeit -s 'import plistlib; a = list(range(100))' -- 'plistlib.dumps(a, fmt=plistlib.FMT_XML)'
Unpatched: 1000 loops, best of 5: 228 usec per loop
Patched: 1000 loops, best of 5: 204 usec per loop
$ ./python -m timeit -s 'import plistlib; a = list(range(100))' -- 'plistlib.dumps(a, fmt=plistlib.FMT_BINARY)'
Unpatched: 1000 loops, best of 5: 234 usec per loop
Patched: 1000 loops, best of 5: 203 usec per loop
$ ./python -m timeit -s 'import plistlib; a = list(range(100)); p = plistlib.dumps(a, fmt=plistlib.FMT_XML)' -- 'plistlib.loads(p)'
Unpatched: 1000 loops, best of 5: 308 usec per loop
Patched: 2000 loops, best of 5: 155 usec per loop
$ ./python -m timeit -s 'import plistlib; a = list(range(100)); p = plistlib.dumps(a, fmt=plistlib.FMT_BINARY)' -- 'plistlib.loads(p)'
Unpatched: 2000 loops, best of 5: 116 usec per loop
Patched: 5000 loops, best of 5: 94.6 usec per loop
$ ./python -m timeit -s 'import plistlib; a = {"a%d" % i: i for i in range(100)}' -- 'plistlib.dumps(a, fmt=plistlib.FMT_XML)'
Unpatched: 500 loops, best of 5: 433 usec per loop
Patched: 1000 loops, best of 5: 384 usec per loop
$ ./python -m timeit -s 'import plistlib; a = {"a%d" % i: i for i in range(100)}' -- 'plistlib.dumps(a, fmt=plistlib.FMT_BINARY)'
Unpatched: 500 loops, best of 5: 616 usec per loop
Patched: 500 loops, best of 5: 560 usec per loop
$ ./python -m timeit -s 'import plistlib; a = {"a%d" % i: i for i in range(100)}; p = plistlib.dumps(a, fmt=plistlib.FMT_XML)' -- 'plistlib.loads(p)'
Unpatched: 500 loops, best of 5: 578 usec per loop
Patched: 1000 loops, best of 5: 308 usec per loop
$ ./python -m timeit -s 'import plistlib; a = {"a%d" % i: i for i in range(100)}; p = plistlib.dumps(a, fmt=plistlib.FMT_BINARY)' -- 'plistlib.loads(p)'
Unpatched: 1000 loops, best of 5: 257 usec per loop
Patched: 1000 loops, best of 5: 208 usec per loop
----------
components: Library (Lib)
messages: 307404
nosy: ronaldoussoren, serhiy.storchaka
priority: normal
severity: normal
status: open
title: Rewrite plistlib with functional style
type: performance
versions: Python 3.7
_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue32196>
_______________________________________
More information about the New-bugs-announce
mailing list