我正在从这样的 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 的新实例,它花费的时间最长,而是脚本的实际执行。
谁能给我解释一下?