Eine einfache Möglichkeit, Java von Python aus aufzurufen

Einführung

So rufen Sie eine Java-Methode aus Python mit py4j auf. Ich hatte es schwer mit all den alten japanischen Dokumenten, also habe ich sie zusammengefasst.

Umgebung

OS X Yosemite 10.10.5 anaconda 3.5.0(python 3.5.2)

Installation

Kopieren Sie nach der Installation von py4j mit pip das JAR, damit py4j auf der Java-Seite gelesen werden kann.

$ pip install py4j
$ sudo cp ~/.pyenv/versions/(Name der virtuellen Umgebung)/share/py4j/py4j(Ausführung).jar /Library/Java/Extensions/

Implementierung

Lassen Sie uns gemäß dem offiziellen Tutorial ein einfaches Beispiel erstellen, das in Java hinzugefügt wird. Erstellen Sie zunächst das folgende Java-Programm.

AdditionApplication.java


import py4j.GatewayServer;

public class AdditionApplication {

  public int addition(int first, int second) {
    return first + second;
  }

  public static void main(String[] args) {
    AdditionApplication app = new AdditionApplication();
    //App-Gateway.entry_Auf Punkt setzen
    GatewayServer server = new GatewayServer(app);
    server.start();
    System.out.println("Gateway Server Started")
  }
}

Starten Sie den Server nach dem Erstellen mit dem folgenden Befehl.

$ javac AdditionApplication.java
$ java AdditionApplication

Als nächstes schreiben wir ein Python-Programm, um AdditionApplication aufzurufen.

from py4j.java_gateway import JavaGateway

#Stellen Sie eine Verbindung zu JVM her
gateway = JavaGateway() 
# java.util.Erstellen Sie eine zufällige Instanz
random = gateway.jvm.java.util.Random()   
# Random.Rufen Sie nextInt an
number1 = random.nextInt(10)              
number2 = random.nextInt(10)
print(number1,number2) # (2, 7)
#Rufen Sie eine Instanz von AdditionApplication ab
addition_app = gateway.entry_point        
#Rufen Sie zusätzlich an
sum_num=addition_app.addition(number1,number2)    
print(sum_num) # 9

Derzeit kann es von Python aus aufgerufen werden. Es ist jedoch etwas mühsam, den Server vom Terminal aus zu starten und zu stoppen. Wie auch immer, lassen Sie es uns von Anfang bis Ende in Python ausführen.

#Führen Sie dies aus, indem Sie den Klassenpfad angeben
args=(["java","-cp",'/path/to/class/','AdditionApplication'])
p=subprocess.Popen(args)
#Verhindern Sie, dass die Verarbeitung ausfällt, bevor Sie den Server starten
time.sleep(3) 
gateway = JavaGateway(start_callback_server=True)
random = gateway.jvm.java.util.Random()
n1 = random.nextInt(10)
n2 = random.nextInt(10)
print(number1,number2) # (2, 7)
addition_app = gateway.entry_point
print(addition_app.addition(n1, n2)) # 9
#Töte den Prozess
gateway.shutdown()

Sie können es jetzt bis zum Ende konsistent mit Python ausführen. Es kann verwendet werden, wenn Sie ein Projekt einer Javer-Person erben, wenn Sie eine Java-Bibliothek verwenden möchten oder wenn Sie eine Verarbeitung implementieren möchten, die Geschwindigkeit in Java erfordert.

Referenz

https://www.py4j.org/ https://gist.github.com/bartdag/1070311

Recommended Posts

Eine einfache Möglichkeit, Java von Python aus aufzurufen
Rufen Sie Matlab von Python zur Optimierung auf
Einfache Möglichkeit, den Python-Import anzupassen
[Python Tutorial] Eine einfache Einführung in Python
[Python] Einfache Möglichkeit, Energiedaten interaktiv zu visualisieren [plotly.express]
Einfache Möglichkeit, Wikipedia mit Python zu verwenden
Eine einfache Möglichkeit, die Amazon-Produkt-API in Python aufzurufen
Einfache Möglichkeit, Python 2.7 unter Cent OS 6 zu verwenden
Änderungen von Python 3.0 zu Python 3.5
Änderungen von Python 2 zu Python 3.0
Einfache Möglichkeit, die Quelle der Python-Module zu überprüfen
Einfache Möglichkeit, mit Google Colab mit Python zu kratzen
[Python] So rufen Sie eine Funktion von c aus Python auf (ctypes edition)
Rufen Sie CPLEX von Python aus auf (DO cplex)
Post von Python nach Slack
Anaconda aktualisiert von 4.2.0 auf 4.3.0 (python3.5 aktualisiert auf python3.6)
[Python] Eine andere Möglichkeit zum Importieren
Stellen Sie von Python aus eine Verbindung zu SQLite her
Einfache Möglichkeit, Dateien umzubenennen
Eine Einführung in die Python-Programmierung
Einfache Möglichkeit, 0 abhängig von der Anzahl der Ziffern vorangestellt [Python]
Rufen Sie C-Sprachfunktionen von Python auf, um mehrdimensionale Arrays auszutauschen
Gehen Sie zur Sprache, um Teil 8 zu sehen und sich daran zu erinnern. Rufen Sie die GO-Sprache von Python aus auf
PyArmor ~ Einfache Möglichkeit, Python-Quellcode zu verschlüsseln und bereitzustellen ~
Wie man Python oder Julia von Ruby aus aufruft (experimentelle Implementierung)
Eine einfache Möglichkeit, die in Python benötigte Zeit anzuzeigen und sie intelligenter zu verbessern
Rufen Sie C von Python mit DragonFFI auf
Post von Python auf Facebook Timeline
Bedienen Sie ein mit I2C verbundenes Display über Python
[Lambda] [Python] Von Lambda auf Twitter posten!
Rufen Sie popcount von Ruby / Python / C # auf
Python (vom ersten Mal bis zur Ausführung)
Poste ein Bild von Python auf Tumblr
Rufen Sie Python von Nim mit Nimpy auf
Python, um von einer anderen Sprache zu wechseln
Einfaches Erlernen von Python beim Schreiben
Erste Schritte mit Python für Nicht-Ingenieure
Eine Alternative zu "Pause" in Python
Rufen Sie Java-Klassen von CPython (Py4J) auf.
Rufen Sie C / C ++ von Python auf dem Mac auf
Rufen Sie die c-Sprache von Python aus auf (python.h)
Hat sich nicht von Python 2 auf 3 geändert
Aktualisieren Sie Mac Python von 2 auf 3
Einfache Möglichkeit, nach dem Dezimalpunkt in Python3 abzurunden
Versuchen Sie, mit Python3 eine Zeichenfolge aus einem Bild zu extrahieren
Eine einfache Möglichkeit, einen zuvor ausgeführten Befehl in ipython erneut auszuführen
Rufen Sie dlm von Python aus auf, um ein zeitvariables Koeffizientenregressionsmodell auszuführen
So zeigen Sie Bytes in Java und Python auf die gleiche Weise an
Warum ich von Java zu Dart gewechselt bin
C-Sprache zum Anzeigen und Erinnern Teil 2 Rufen Sie die C-Sprache aus der Python-Zeichenfolge (Argument) auf
[Hinweis] [PyTorch] Von der Installation bis zur einfachen Verwendung
python3 So installieren Sie ein externes Modul
So aktualisieren Sie Google Sheets von Python
So konvertieren Sie Python in eine exe-Datei
Privates Python-Handbuch (von Zeit zu Zeit aktualisiert)
Ich möchte ein Glas aus Python verwenden