栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java和python之间的桥梁—py4j实例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java和python之间的桥梁—py4j实例

py4j的功能:py4j可以使pthon调用java的程序。

环境要求:

  1. 配置python环境,Py4J 已经用 Python 2.7、3.4、3.5、3.6 和 3.7 进行了测试。
  2. 配置java环境,版本最好1.7以上

目录

官方案例1 ——初识py4j

官方案例——在python中调用java编写的类

1 编写java代码

2 编写python代码


官方案例1 ——初识py4j

在python中调用java的方法,在调用java之前,请注意,在执行Python 代码之前,必须先启动 Java 程序。 f否则会这个错误:

Py4JNetworkError: An error occurred while trying to connect to the Java server (127.0.0.1:25333)

换句话说,Py4J 不会启动 JVM。

1 首先编写代码,并运行:

public class AdditionApplication {
    public int addition(int first,int second){
        return first + second;
    }
    public static void main(String[] args){
        AdditionApplication app = new AdditionApplication();
        GatewayServer server = new GatewayServer(app);
        server.start();
    }
}

运行程序,来启动jvm。 

2 python调用程序

from py4j.java_gateway import JavaGateway
gateway = JavaGateway()#和jVM的链接
#创建一个java.util.Random的实例
random = gateway.jvm.java.util.Random()
#random = gateway.jvm.java.util.Random()
number1 = random.nextInt(10)
number2 = random.nextInt(10)

print(number1,number2)

#获取 AdditionApplication 实例
addition_app = gateway.entry_point
#进行加法计算
value = addition_app.addition(number1,number2)
print(value)

 结果:

9 4
13

官方案例——在python中调用java编写的类

您将用 Java 编写一个简单的 Stack 类,然后编写一个访问堆栈的 Python 程序。

1 编写java代码

Stack类的主要方法包括:

  1. 将一个元素压入栈顶。
  2. 弹出栈顶元素。
  3. 获取包含堆栈的列表。
  4. 推送包含在列表中的所有元素。
import java.util.linkedList;
import java.util.List;

public class Stack {
    private List internalList = new linkedList();

    public void push(String element) {
        internalList.add(0, element);
    }

    public String pop() {
        return internalList.remove(0);
    }

    public List getInternalList() {
        return internalList;
    }

    public void pushAll(List elements) {
        for (String element : elements) {
            this.push(element);
        }
    }
}

要想python访问java的内容,在java代码中需要开启相关服务,即运行python开启jvm。

允许 Python 程序访问预配置堆栈的入口点示例

public class StackEntryPoint {
    private Stack stack;
    public StackEntryPoint(){
        Stack stack = new Stack();
        stack.push("initial Item");
    }
    //为该类将提供对预配置堆栈的访问权限:
    public Stack getStack(){
        return stack;
    }
    public static void main(String[] args){
        //开启jvm,并指定刚刚定义的类
        GatewayServer gatewayServer = new GatewayServer(new StackEntryPoint(),25335);
        //需要启动网关,以便它可以接受传入的 Python 请求:
        gatewayServer.start();
        System.out.println("Gateway Server Started");
    }
}

运行:

 

2 编写python代码
from py4j.java_gateway import JavaGateway, GatewayParameters
gateway = JavaGateway(gateway_parameters=GatewayParameters(port=25335))#和jVM的链接
stack = gateway.entry_point.getStack()

stack.push("First %s" % ('item'))
stack.push("firt element")

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/325491.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号