Justin, I would add, that you check only for "pyc" extension.
In my apache2+mod_wsgi configuration I use "WSGIPythonOptimize 2" directive, that creates files with "pyo" extension. On Feb 11, 10:30 am, Justin Davis <[email protected]> wrote: > Hey everyone, > > I modified the webpy reloader to be less kind in general -- syntax > errors, for instance, will just kill the process -- but it generally > gets rid of issues with reloader not picking up changes. It only works > in linux, by waking up every second to check for changes. If anyone's > interested, here's the code and how to use it: > > app = web.application(urls, globals() # as usual > > ## Reloader > import sys, os, signal, pprint, types > class PeriodicReloader(object): > def __init__(self, interval=1): > self.interval = interval > self.mtimes = {} > self.sig_setup() > > def sig_setup(self): > signal.signal(signal.SIGALRM, self.check) > signal.alarm(self.interval) > > def check(self, signum, frame): > for mod in sys.modules.values(): > if not isinstance(mod, types.ModuleType): > continue > > path = getattr(mod, '__file__', None) > if not path: > continue > > mtime = os.stat(mod.__file__).st_mtime > if mod.__file__.endswith('.pyc') and > os.path.exists(mod.__file__[:-1]): > mtime = max(os.stat(mod.__file__[:-1]).st_mtime, > mtime) > > if mod not in self.mtimes: > self.mtimes[mod] = mtime > elif self.mtimes[mod] < mtime: > web.debug("Reloading app due to module change") > os.execv(sys.executable, [sys.executable] + sys.argv) > self.sig_setup() > > ### Go ### > if __name__ == '__main__': > if web.config.debug: > PeriodicReloader() > app.run() -- You received this message because you are subscribed to the Google Groups "web.py" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/webpy?hl=en.
