Py4j не может подключиться к серверу Java

Я пытался написать простую программу для установки соединения между python и java с использованием py4j. Я написал следующие две строки, надеясь, что все будет работать, так как я не делаю никаких изменений

from py4j.java_gateway import JavaGateway, GatewayParameters
gateway = JavaGateway(gateway_parameters=GatewayParameters(port=25335))
random = gateway.jvm.java.util.Random()

что привело к следующей ошибке

py4j.protocol.Py4JNetworkError: Произошла ошибка при попытке подключения к серверу Java (127.0.0.1:25335)

Я некоторое время оглядывался по сторонам и читал, что это может произойти, если java прослушивает другой порт. Поэтому я написал для блока, чтобы увидеть, что происходит

for i in range(65535+1):
    try:
        gateway = JavaGateway(gateway_parameters=GatewayParameters(port=i))
        random = gateway.jvm.java.util.Random()
        print("passed port num", str(i))
    except:
        pass

Вышеуказанный блок ничего не дал. Ни один из портов не мог соединиться. Я не могу понять, где я иду не так.

Как мне найти номер порта, который использует сторона Java?

Я использую py4j версии 0.10.7 и python 3.6.0

РЕДАКТИРОВАТЬ

Я использовал тот же код Java, который использовался в учебнике по py4j

У меня есть файл с именем java_stack.java а также py4j_gs.java, Оба находятся в одном каталоге. Я звоню `java py4j_gs.java из терминала. Это содержимое двух файлов

java_stack.java

package py4j.examples;    
import py4j.GatewayServer;
public class StackEntryPoint {
    private Stack stack;
    public StackEntryPoint() {
      stack = new Stack();
      stack.push("Initial Item");
    }
    public Stack getStack() {
        return stack;
    }
    public static void main(String[] args) {
        GatewayServer gatewayServer = new GatewayServer(new StackEntryPoint());
        gatewayServer.start();
        System.out.println("Gateway Server Started");
    }    
}

py4j_gs.java

package py4j.examples;
import py4j.GatewayServer;
public class StackEntryPoint {
    private Stack stack;
    public StackEntryPoint() {
      stack = new Stack();
      stack.push("Initial Item");
    }
    public Stack getStack() {
        return stack;
    }
    public static void main(String[] args) {
        GatewayServer gatewayServer = new GatewayServer(new StackEntryPoint());
        gatewayServer.start();
        System.out.println("Gateway Server Started");
    }
}

0 ответов

Я также столкнулся с чем-то таким же, как

py4j.java_gateway: при попытке подключения к серверу Java произошла ошибка

во время работы над оболочкой pyspark. Чтобы решить это в первую очередь, нам нужно запустить сервер Java Java Geteway.После выполнения следующего кода Java моя проблема получила разрешение.

import py4j.GatewayServer;

public class Test {

    public static void main(String[] args) {
        Test app = new Test ();
        // app is now the gateway.entry_point
        GatewayServer server = new GatewayServer(app);
        server.start();
    }
}
Другие вопросы по тегам