[New-bugs-announce] [issue29383] Reduce temporary unicode object while adding descriptors
INADA Naoki
report at bugs.python.org
Fri Jan 27 22:04:15 EST 2017
New submission from INADA Naoki:
add_methods(), add_members(), and add_getset() creates PyUnicode from C string 3 times, and calls PyUnicode_InternInplace 2 times.
1. PyDict_GetItemString() at first. (PyUnicode_FromString() is called).
2. In middle, descr_new() calls PyUnicode_InternFromString().
3. PyDict_SetItemString() at last. (creates unicode and intern it).
Skipping (2) is require adding new private APIs to pass PyUnicodeObject.
But I don't think it worth enough. (I'll try it later.)
So this patch only remove last temporary unicode.
(3 PyUnicode_FromString + 2 PyUnicode_InternInplace) becomes (2 PyUnicode_FromString + 2 PyUnicode_InternInplace).
It seems ~1% startup speedup (without site).
$ ./python -m performance.benchmarks.bm_python_startup --no-site
default: python_startup_no_site: Median +- std dev: 12.7 ms +- 0.1 ms
patched: python_startup_no_site: Median +- std dev: 12.6 ms +- 0.1 ms
While speedup is small, this patch removes time to think "How large this
overhead of GetItemString + SetItemString pair?" while reading code :)
Additionally, this patch removes this comment in PyDict_SetItemString:
- PyUnicode_InternInPlace(&kv); /* XXX Should we really? */
SetItemString is used to add something to namespace.
Changing this behavior affects too widely. So we should do it.
----------
assignee: inada.naoki
components: Interpreter Core
files: descr-remove-getitemstring.patch
keywords: patch
messages: 286394
nosy: inada.naoki
priority: normal
severity: normal
status: open
title: Reduce temporary unicode object while adding descriptors
versions: Python 3.7
Added file: http://bugs.python.org/file46441/descr-remove-getitemstring.patch
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue29383>
_______________________________________
More information about the New-bugs-announce
mailing list