我有几个python脚本(例如Level1ZombieClassObject.ZombieLevel1Class(playerClass);
,a.py
)在顶部共享相同的开销,例如:
b.py
然后我有一个java脚本,用户运行时分别调用这几个python脚本:
import matplotlib.pylab as plt
#and some Oracle database connection and reading.
由于每次python调用期间的java Runtime和python导入开销,我都会遇到重复的开销。我想知道是否有一种方法在第一次python调用期间只涉及一次开销(通过传递一些python处理程序/状态可能?)我也对第三方工具(例如Jython)开放。
答案 0 :(得分:2)
不是单独启动每个程序并运行完成,而是创建一个从标准输入读取并与该启动器交互的“启动器” - 这应该是一个程序,在它被告知之前不会退出;它的全部目的是启动其他功能。
然后将其视为资源并使用它来调用各个函数并返回结果(而不是Java的var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d'),
cellSize = 50,
pic = new Image(),
map =
[
[{x:5,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1}],
[{x:3,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1}],
[{x:3,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1}],
[{x:3,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1}],
[{x:3,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1}],
[{x:3,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1}],
[{x:3,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1},{x:1,y:1}],
[{x:4,y:1},{x:2,y:1},{x:2,y:1},{x:2,y:1},{x:2,y:1},{x:2,y:1},{x:2,y:1},{x:2,y:1}]
];
var scaleFix=1.02;
canvas.width = 16 * cellSize;
canvas.height = 16 * cellSize;
ctx.setTransform(1.00, -0.5, 1.00, 0.5, 0, 200);
pic.src = 'http://promodesign.kei.pl/cb/test/sprite.svg';
pic.onload = function() {
for (var j = 0 ; j < 8; j ++)
for (var i = 0; i < 8; i ++)
ctx.drawImage(pic, (map[i][j].x-1)*cellSize, (map[i][j].y-1)*cellSize, 50, 50, j*cellSize, i*cellSize, 50*scaleFix, 50*scaleFix);
var pic2 = new Image(); pic2.src = 'http://promodesign.kei.pl/cb/test/man.png';
pic2.onload = function() {
ctx.setTransform(1, 0, 0, 1, 0, 60);
ctx.drawImage(pic2, 150*scaleFix, 75*scaleFix);
}
}
)。
相同的策略可以用于具有共享依赖关系的许多不同类型的外部程序 - 启动程序可以加载公共依赖项/它自己的运行时一次,并且更快地调用这些依赖项中的函数。
答案 1 :(得分:1)
您可以启动一次Python脚本,然后通过某种IPC(进程间通信)与它进行重复任务。想到的一些方法:
然而,实施其中任何一项确实有点像过早优化。为什么不首先实现最简单的方法(如在您的示例中),并分析您的CPU使用情况。有可能,您当前的方法不会像您可能怀疑的那样削减CPU使用率。
答案 2 :(得分:1)
不确定这是否会加速您的程序,但一种选择是使用Jython启动Python解释器一次,然后将其重用于多个脚本。您只需要在Jython JAR上添加依赖项(在http://www.jython.org/downloads.html下载或使用Maven / Gradle /等。)
import org.python.util.PythonInterpreter;
public class JythonTest {
public static void main(String[] args) {
PythonInterpreter pythonInterpreter = new PythonInterpreter();
pythonInterpreter.execfile("a.py");
pythonInterpreter.execfile("b.py");
}
}
参考:http://tssblog.blogs.techtarget.com/2007/11/21/using-python-within-java/