Calling RegexURLResolver.__repr__ takes a lot of time (and memory)
|Reported by:||milosu||Owned by:||nobody|
|Has patch:||yes||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||no|
I have an application which has about 70K RegexURLPatterns.
When I try to access some non-existent url in this app under Django 1.4RC1, it takes a huge amount of time - I mean 1 or 2 minutes - to generate the technical 404 response and also the memory consumption goes from 220MB to something about 460MB.
The problem is in a call to RegexURLResolver.repr, which is called about 3 times during the technical 404 debug response. It looks like the whole RegexURLResolver including all its sub-patterns is being recursively traversed during a call to repr.
I had to patch RegexURLResolver.repr to cut this CPU overhead.
Patch attached, but I'm not sure how to write a test case for it.
I'm also attaching the profiling results of unpatched Django 1.4RC.
I'm upgrading from Django 1.2.3 so I'm not sure if this behaviour is present in 1.3 or if it is new to 1.4, but from my point of view this is a release blocker.
Change History (4)
comment:1 Changed 5 years ago by
|Patch needs improvement:||unset|
|Severity:||Release blocker → Normal|
|Triage Stage:||Unreviewed → Accepted|