|
Graham Dumpleton
grahamd at dscpl.com.au
Fri Feb 4 21:33:59 EST 2005
On 05/02/2005, at 1:45 AM, Shawn Harrison wrote:
> Graham,
>
> Let's suppose I have the following four modules a.py, b.py, c.py, and
> util.py in a folder in sys.path, and in httpd.conf I have
> "PythonHandler a" for a given url space. If I make changes in a.py,
> b.py or c.py, these changes are immediately visible in the browser.
As mentioned in my original email, it only works because the
loading/reloading
of the module is done from inside every function, which can just get
messy after a
while.
What most people are used to in Python is loading modules at global
scope within a
module. Ie.,
# c.py
...
# b.py
import c
# a.py
import b
Obviously, use this way isn't going to work, but the first thing people
will try and
which would be preferable, is to replace the "import" where it is with:
c = apache.import_module("c")
Ie., still at global scope in module.
This however doesn't work, as determination of whether sub import needs
to be reload
is only done at import time of the parent module and not per request.
Thus, yes the way you have done it will work in the way you have used
it, that is, in
every method, but use it at global scope as above and it doesn't and is
not different
to how the mod_python module loader works.
Just think now of what you have to do if util.py had 40 methods and
required other
sub modules imports. Every method that uses a sub module, has to load
it. As I said
it gets messy and this shouldn't have to be the case. With Vampire's
module loader
you can still do it at global scope (once) and it will work.
Graham
|