用Java调用Python脚本 - 用Java线程化后慢速Python

时间:2013-07-05 08:18:16

标签: java python multithreading jython

我正在从这样的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,因为否则每个Thread都会使用相同的参数调用Pythonscript,即相同的状态。

所以这是奇怪的部分。

如果我一次只运行一个这样的线程,脚本的执行速度会越来越快 但是,如果我一次运行多个线程,则执行时间也会相同,并且时间很长...大约5秒。 此外,它不是创建PySystemState或PythonInterpreter的新实例,它占用时间最长,它是脚本的实际执行。

任何人都可以向我解释这个吗?

0 个答案:

没有答案