python与java的一点纠缠——jpype

把python和java放到一块说的话,总让人想到jython,jython不错,但是我不太愿意总去折腾jvm上运行的东西。

jpype是什么,说白了就是一个桥接,正如jni之于java,java可以通过jni来调用c,c++写的扩展,而python则利用jpype调用java类库,这和在jvm上运行jython是不同的,你的运行环境实际是python runtime,只是在运行期间可以启动一个嵌入的jvm。其实可以这么说,jython是给java程序员玩的,jpype是给python程序员玩的。

下面可以通过一个例子来了解jpype是如何实现java调用的:

java代码:
package demo.jpype;
public class JpypeDemo
{
    public String sayHello(String user)
    {
        return  "hello " + user;
    }
    public int calc(int a,int b)
    {
        return a+b;
    }
}

为方便调用,打包为jpypedemo.jar
python调用:
from jpype import *
import os

startJVM("%s/jre/bin/client/jvm.dll"%(os.environ.get("JAVA_HOME")), "-ea","-Djava.class.path=jpypedemo.jar")
JDClass = JClass("demo.jpype.JpypeDemo")

#jd = JDClass()
jd = JPackage("demo").jpype.JpypeDemo()
jprint = java.lang.System.out.println

jprint(jd.sayHello("waw"))
jprint(jd.calc(2,4))

shutdownJVM()


输出:
hello waw
6
JVM activity report     :
classes loaded       : 31
JVM has been shutdown

是不是很酷呢!

在写基于jni的本地函数时,总是要很小心的进行内存管理,而对于jpype来说python和java本身都是有良好的内存管理机制,内存的管理要轻松很多。通过jpype可以充分的利用Java类库来完成很多事情。





你可能感兴趣的:(java,jvm,python,jni,jython)