[New-bugs-announce] [issue28309] Accelerate string.Template by using formatted string literals

Serhiy Storchaka report at bugs.python.org
Thu Sep 29 05:01:26 EDT 2016


New submission from Serhiy Storchaka:

Proposed patch makes string.Template compiling template to formatted string literal. Since for now using formatted string literals is the fastest way of formatting strings, this significantly speeds up Template substitution.

$ ./python -m perf timeit -s 'from string import Template; s = Template("$who likes $what")' -- 's.substitute(who="tim", what="ham")'

Unpatched:  Median +- std dev: 46.1 us +- 4.2 us
Patched:    Median +- std dev: 11.1 us +- 0.5 us

The drawback is that compiling template adds high overhead.

$ ./python -m perf timeit -s 'from string import Template' -- 's = Template("$who likes $what"); s.substitute(who="tim", what="ham")'

Unpatched:  Median +- std dev: 51.7 us +- 1.5 us
Patched:    Median +- std dev: 672 us +- 38 us

The benefit of using compiled templates is achieved only if make at least 20 substitutions with the same template.

Third-party template engines can use the same approach in Python 3.6+.

----------
components: Library (Lib)
messages: 277690
nosy: eric.smith, georg.brandl, serhiy.storchaka
priority: low
severity: normal
status: open
title: Accelerate string.Template by using formatted string literals
type: performance
versions: Python 3.7

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue28309>
_______________________________________


More information about the New-bugs-announce mailing list