Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
916315cf
Commit
916315cf
authored
Mar 16, 2013
by
Serhiy Storchaka
Browse files
Options
Browse Files
Download
Plain Diff
Issue #16564: Fixed a performance regression relative to Python 3.1 in the
caching of compiled regular expressions.
parents
afe328cd
f5e23cc8
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
27 additions
and
6 deletions
+27
-6
Lib/re.py
Lib/re.py
+24
-6
Misc/NEWS
Misc/NEWS
+3
-0
No files found.
Lib/re.py
View file @
916315cf
...
...
@@ -215,8 +215,8 @@ def compile(pattern, flags=0):
def
purge
():
"Clear the regular expression caches"
_c
ompile
.
cache_
clear
()
_c
ompile_repl
.
cache_
clear
()
_c
ache
.
clear
()
_c
ache_repl
.
clear
()
def
template
(
pattern
,
flags
=
0
):
"Compile a template pattern, returning a pattern object"
...
...
@@ -259,11 +259,18 @@ def escape(pattern):
# --------------------------------------------------------------------
# internals
_cache
=
{}
_cache_repl
=
{}
_pattern_type
=
type
(
sre_compile
.
compile
(
""
,
0
))
@
functools
.
lru_cache
(
maxsize
=
512
,
typed
=
True
)
_MAXCACHE
=
512
def
_compile
(
pattern
,
flags
):
# internal: compile pattern
try
:
return
_cache
[
type
(
pattern
),
pattern
,
flags
]
except
KeyError
:
pass
if
isinstance
(
pattern
,
_pattern_type
):
if
flags
:
raise
ValueError
(
...
...
@@ -271,12 +278,23 @@ def _compile(pattern, flags):
return
pattern
if
not
sre_compile
.
isstring
(
pattern
):
raise
TypeError
(
"first argument must be string or compiled pattern"
)
return
sre_compile
.
compile
(
pattern
,
flags
)
p
=
sre_compile
.
compile
(
pattern
,
flags
)
if
len
(
_cache
)
>=
_MAXCACHE
:
_cache
.
clear
()
_cache
[
type
(
pattern
),
pattern
,
flags
]
=
p
return
p
@
functools
.
lru_cache
(
maxsize
=
512
)
def
_compile_repl
(
repl
,
pattern
):
# internal: compile replacement pattern
return
sre_parse
.
parse_template
(
repl
,
pattern
)
try
:
return
_cache_repl
[
repl
,
pattern
]
except
KeyError
:
pass
p
=
sre_parse
.
parse_template
(
repl
,
pattern
)
if
len
(
_cache_repl
)
>=
_MAXCACHE
:
_cache_repl
.
clear
()
_cache_repl
[
repl
,
pattern
]
=
p
return
p
def
_expand
(
pattern
,
match
,
template
):
# internal: match.expand implementation hook
...
...
Misc/NEWS
View file @
916315cf
...
...
@@ -193,6 +193,9 @@ Core and Builtins
Library
-------
- Issue #16564: Fixed a performance regression relative to Python 3.1 in the
caching of compiled regular expressions.
- Issue #17431: Fix missing import of BytesFeedParser in email.parser.
- Issue #1285086: Get rid of the refcounting hack and speed up
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment