I'm in the process of converting a large legacy app from Django 1.5 to 1.7. I've got all the tests passing, so I'm researching an issue I noticed during the course of my work: Test startup takes MUCH longer under Django 1.7 than it did under 1.5. I've got a test that, when run by itself, took a total of 5 seconds under 1.5. Under 1.7 it takes over a minute.
To isolate the test startup, I setup a do-nothing test method within a subclass of django.test.TestCase. I ran it under Django 1.5 and 1.7 with similar results to the existing "real" test. I ran the do-nothing test within cProfile under Django 1.7 and found something very interesting. According to pstats, the method django.apps.config.AppConfig.get_models() was called 2.2+ MILLION times. Even with 79 django apps in my INSTALLED_APPS setting, that seems excessive. I read the Django 1.7 release notes, especially the App Config stuff. I noticed the warning about not importing models in the application root module. I went through all of our internal apps and made sure they were not importing models in the root module. I had to make some changes, moving imports inside functions/methods. I also looked at my third-party dependency apps. None of those were importing their models in their root modules. After all that, though, I still see no change in behavior. I thought I might have some loop happening somewhere, though why it wasn't infinite was interesting. It would be nice to know more about the context of those get_models() calls. Perhaps I had a couple of mis-behaving apps locked in a deadly embrace of some sort. I hacked on my locally installed django.apps.config.AppConfig class, adding a class-level collections.Counter that gets incremented for self.label by the get_models() method. I dumped the results to a json file within my do-nothing test. It wouldn't be comprehensive, but at least it would show me what had happened before the test ran. I expected to see a few big numbers and a lot of small ones. As often happens when profiling, my expectations were completely wrong. All the counts were very similar, all in the 6000-7999 range. All 79 of my apps were represented. Is there some sort of cartesian product going on here? Is this behavior normal and expected? -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/4c698390-e8e2-437e-ae74-34c796986275%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.

