From: Kent J. <ke...@td...> - 2006-07-29 11:08:12
|
Simon Toens wrote: > > Hi all, > > We're using jython with a fairly large python code base. The initial > jython startup time is pretty slow. > > The very first startup time (no .class files on disk) is about 10 seconds. > Subsequent startup times are around 7 seconds. > > So I am guessing the first time is slowest because jython writes > .class files to disk. What is most of the startup time spent in once > the .class files are on disk? Is it jython trying to figure out all > the module dependencies, and whether or not it needs to generate > .class files? > I think it is just the imports that are slow. In my larger projects I try to defer imports to shorten the startup time. For example, normal practice is to put all the imports at the top of each module: # module main.py import a def main(): a.do_something() # module a.py import b def do_something(): b.really_do_it() # module b.py def really_do_it(): pass When main.py is run, it imports a.py which imports b.py, so when the program is run it loads every module. This will also extend to importing every Java module used by the program. In contrast, consider this: # module main.py import a def main(): a.do_something() # module a.py def do_something(): import b b.really_do_it() # module b.py def really_do_it(): pass Now b is not imported until it is used. There is no significant performance impact to this, since all imports after the first are essentially dictionary lookups. Kent |