Несколько сред Jython в одной JVM
Можно ли запустить более одной среды Jython с разными системными настройками (т.е. путями импорта библиотеки) под одной JVM.
Если это возможно, пожалуйста, предложите, как это можно сделать правильно.
Технически ничто не мешает мне иметь PythonInterpreter interpreter = new PythonInterpreter();
выполняется более одного раза. Но я хотел бы быть уверенным, что где-то внутри нет синглтона.
1 ответ
После проверки исходного кода кажется, что PySystemState является одноэлементным
public class PySystemState extends PyObject implements ClassDictInit {
...
private static boolean initialized = false;
...
public static synchronized PySystemState doInitialize(Properties preProperties,
Properties postProperties,
String[] argv,
ClassLoader classLoader,
ExtensiblePyObjectAdapter adapter) {
if (initialized) {
return Py.defaultSystemState;
}
initialized = true;
...
Это означает, что свойства PySysStatus устанавливаются только один раз, и следующий вызов для получения PySysState вернет вам ту же среду Jython.
Есть еще способ использовать собственный ClassLoader для инициализации разных PySysState в разных контекстах, но для моей задачи это не требуется.