[Twisted-Python] Automatically refresh imported module from source

Christopher Armstrong radix at twistedmatrix.com
Fri Feb 28 21:32:47 EST 2003


On Fri, Feb 28, 2003 at 04:02:19PM -0800, Thad Jacobs wrote:
> 
> I realize that TwistedWeb must be caching the imported modules so future
> requests don't require it to re-read from file, but it would seem that it
> should at least check the modules modified date to make sure it still has a
> current copy whenever the module is requested.

Nah, twisted.web doesn't do that, Python does. Python never
re-executes a module unless it's explicitly told to; the cache is in
`sys.modules'. And also, it would not be good if twisted.web checked
to reload the modules every time - that would hurt performance when
it's not really needed - you only really need it during development.

> Here's the source for an example that demonstrates my point:
> 
> #Begin Test.rpy
> 
> from twisted.web import resource
> import TestModule

Right here, just insert `reload(TestModule)' -- when you're in active
development. Just take it out after you're ready to deploy.

One caveat is if you have persistent objects that aren't re-created
from the .rpy on every request, `reload' won't update them. If that is
your case (which it isn't in your example), you should use
twisted.python.rebuild.

  from twisted.python.rebuild
  rebuild.rebuild(TestModule)

rather rather reload(TestModule).


> class MyResource(resource.Resource):
> 	def render(self, request):
> 		return TestModule.SayHello()
> 
> resource = MyResource()
> 
> #End Test.rpy
> 
> #Begin TestModule.py
> 
> def SayHello():
>     return "Hello World!!!"
> 
> #End Testmodule.py
> 


HTH.

-- 
 Twisted | Christopher Armstrong: International Man of Twistery
  Radix  |          Release Manager,  Twisted Project
---------+     http://twistedmatrix.com/users/radix.twistd/




More information about the Twisted-Python mailing list