I was digging through some code today, and I noticed imports are
happening within a lot of functions. It was my knowledge that it works
like so:

import in a function is the same as ruby's load or php's include --
its executed everytime the function is

import in a module outside a function is like ruby's require or php's
require_once -- its loaded and cached in memory

If this is the case, then this seems like an unneeded performance hits
in many situations.

An example off hand, is the get_hexdigest() function of the auth
module: 
http://code.djangoproject.com/browser/django/trunk/django/contrib/auth/models.py

It waits to import the hashing methods, which if you're in a pooled
environment, it could save a lot by onlying importing it once,
correct?

Here's my benchmark script:

import timeit
def without_import():
    pass
def with_import():
    import random


def main():
    print "Without an inner import:",
    print timeit.Timer("module_loading.without_import()", "import
module_loading, random").timeit()
    print "With an inner import:",
    print timeit.Timer("module_loading.with_import()", "import
module_loading").timeit()

if __name__ == '__main__':
    main()

And the result:

Without an inner import: 1.28283500671
With an inner import: 5.402146101

If everyone's in agreement, I'd like to approach correcting this in
Django
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-developers@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to