python - 两次运行代码时JPype无法正确编译
问题描述
我的代码:
jarLocation = "C:/Users/LahiruGunawardhana/Desktop/New folder/info/infodynamics.jar"
# Start the JVM (add the "-Xmx" option with say 1024M if you get crashes due to not enough memory space)
jpype.startJVM(jpype.getDefaultJVMPath(), "-ea", "-Djava.class.path=" + jarLocation,"-Xmx256m")
teCalcClass = jpype.JPackage("infodynamics.measures.discrete").TransferEntropyCalculatorDiscrete
teCalc = teCalcClass(2,1)
teCalc.initialise()
noOfEdges=0
for i in range(0,N-1):
for j in range(i+1,N):
# print(i,"-->",j)
if(nodes_connectivity(j,i) | nodes_connectivity(i,j)):
sss = [int(i) for i in SsourceArray]
ddd = [int(i) for i in DdestArray]
teCalc.addObservations(sss, ddd)
e=teCalc.computeAverageLocalOfObservations()
jpype.shutdownJVM()
我只为这段代码获取一次值。当我第二次运行此代码时,我收到一条错误消息:
_jpype.startup(jvm, tuple(args), True)
OSError: JVM is already started
不知何故,当我为每个步骤重新启动 python 控制台时,它会给出值。
解决方案
在startJVM()之前检查isJVMStarted ()所以它会是这样的:
if jpype.isJVMStarted():
return
jpype.startJVM(jpype.getDefaultJVMPath(), "-ea", "-Djava.class.path=" + jarLocation,"-Xmx256m")
因此,如果您运行两次并且 JVM 正在运行,则此代码将避免再次对其进行初始化
推荐阅读
- android - 为什么 drawablePadding 在 Button 中不起作用?
- sql - SQLlite 使用嵌套查询获取最小值、最大值和平均值
- c - 如何从 C 中引用在 Visual Studio 的 .asm 文件中定义的全局变量
- android - iOS和安卓模板
- python - 在 VS 代码中显示文档的键盘快捷键?
- html - 如何获取具有多个值的类属性的 Web 元素
- javascript - 使用 php cookie 退出意图弹出窗口
- c# - 在 SonarQube 的安全热点中收到警告,确保在此处安全控制
- angular - PrimeNG p-inputnumber 无法输入负小数
- android-studio - Kotlin 4.1 MutableLiveData中'setValue'和'value'之间的区别?