This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author serhiy.storchaka
Recipients ronaldoussoren, serhiy.storchaka
Date 2017-12-01.19:28:36
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1512156516.89.0.213398074469.issue32196@psf.upfronthosting.co.za>
In-reply-to
Content
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
History
Date User Action Args
2017-12-01 19:28:36serhiy.storchakasetrecipients: + serhiy.storchaka, ronaldoussoren
2017-12-01 19:28:36serhiy.storchakasetmessageid: <1512156516.89.0.213398074469.issue32196@psf.upfronthosting.co.za>
2017-12-01 19:28:36serhiy.storchakalinkissue32196 messages
2017-12-01 19:28:36serhiy.storchakacreate