Несколько сред 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 в разных контекстах, но для моей задачи это не требуется.

Другие вопросы по тегам