0

我正在从这样的 java 类中调用 python 脚本:

// build aruments for Script
state.get().argv.clear();
state.get().argv.append(new PyString(""));
state.get().argv.append(new PyString("-i" + Ifolder.toString()));
state.get().argv.append(new PyString("-o" + Ofolder.toString()));

// craete PythonInterpreter with those arguments
PythonInterpreter interp = new PythonInterpreter(null, state.get());

// invode LawLinker
interp.execfile("src/scriptx.py");

state 是一个 Threadlocal 变量,如下所示:

private static final ThreadLocal<PySystemState> state = new ThreadLocal<PySystemState>() {
    @Override
    protected PySystemState initialValue() {
        return new PySystemState();
    }

};

我必须将其设为 ThreadLocal,否则每个线程都会使用相同的参数(即相同的状态)调用 Pythonscript。

所以这是奇怪的部分。

如果我一次只运行一个线程,脚本的执行会越来越快。
但是,如果我一次运行多个线程,执行总是需要相同的时间,而且时间很长......大约 5 秒。此外,它不是创建 PySystemState 或 PythonInterpreter 的新实例,它花费的时间最长,而是脚本的实际执行。

谁能给我解释一下?

4

0 回答 0