From: <Mat...@i2...> - 2002-09-27 17:17:42
|
Hi all, I have an embedded jython application setup in such a way that for each script run I get a new Interpreter with its own independent "sys" module, classLoader and packageManager (see my patch to make packageManager an instance var on PySystemState) I have also arranged things in such a way that I have a delegation model between parent/child interpreters such that a child will always delegate Java class lookups (and therefore also packageManager lookups) to the parent first. This lets my independent interpreters be fairly isolated from each, but also fairly quick to start as I don't have to keep adding jars to the package manager for each new interpreter. My problem is that when doing an import in a script, imp.loadFromPath iterates over sys.path creating a SyspathArchive for each jar in that path. The SyspathArchive ctor used then does a packageManager.addJar - which is a pretty expensive op. What is the rational for adding these python path jars to the java packageManager? It seems kind of redundant if you assume that people adding entries to the classpath (sys.classLoader) usually know enough to manually add those same entries to sys.packageManager. I have the offending line commented out for now, and my interpreters initialize much faster - just letting you know to see if I can convince you to change this behavior in the trunk. =) Matt |
From: Samuele P. <ped...@bl...> - 2002-09-27 18:11:02
|
From: <Mat...@i2...> > Hi all, > > I have an embedded jython application setup in such a way that for each > script run I get a new Interpreter with its own independent "sys" module, > classLoader and packageManager (see my patch to make packageManager an > instance var on PySystemState) > > I have also arranged things in such a way that I have a delegation model > between parent/child interpreters such that a child will always delegate > Java class lookups (and therefore also packageManager lookups) to the > parent first. do you do it only for classes or also for packages ? do you create corresponding packages then? at which level do you delegate ? > This lets my independent interpreters be fairly isolated from each, but > also fairly quick to start as I don't have to keep adding jars to the > package manager for each new interpreter. > > My problem is that when doing an import in a script, imp.loadFromPath > iterates over sys.path creating a SyspathArchive for each jar in that > path. The SyspathArchive ctor used then does a packageManager.addJar - > which is a pretty expensive op. in 2.2, there will be probably a hook, the default will be that way but you will be able to change/disable that behavior. > What is the rational for adding these > python path jars to the java packageManager? convenience. > It seems kind of redundant if > you assume that people adding entries to the classpath (sys.classLoader) > usually know enough to manually add those same entries to > sys.packageManager. honestly I don't believe anymore in hardcoding assumptions about importing or what people want. I'm leaning toward in 2.2 to make all hardcoded assumptions and policies hookable, through re/binding functions in sys or sys.packageManager on Jython side and through instances implementing a policy interface on Java side to which the PackageManagers will delegate policy decisions (how to do dir, what is a java package etc) ... OTOH the PackageMangers hierachy will mostly go away, it seems nobody has subclassed it, apart me in jreload (I should see how to deal with that). For example the cache will decoupled from the PackageManagers and maybe implemented (apart from hotspots (scanning?)) in Jython. All that said, the behavior out-of-the box will be mostly same, but internally it will be implemented differently. regards. |