Python - Remote Procedure Call

Mit dem RPC-System (Remote Procedure Call) können Sie eine auf einem Remote-Server verfügbare Funktion mit derselben Syntax aufrufen, die beim Aufrufen einer Funktion in einer lokalen Bibliothek verwendet wird. Dies ist in zwei Situationen nützlich.

  • Sie können die Rechenleistung mehrerer Computer mit rpc nutzen, ohne den Code für den Aufruf der Programme auf den Remote-Systemen zu ändern.
  • Die für die Verarbeitung benötigten Daten sind nur im Remote-System verfügbar.

In Python können wir also einen Computer als Server und einen anderen Computer als Client behandeln, der den Server aufruft, um die Remote-Prozedur auszuführen. In unserem Beispiel nehmen wir den localhost und verwenden ihn sowohl als Server als auch als Client.

Ausführen eines Servers

Die Python-Sprache enthält einen eingebauten Server, den wir als lokalen Server ausführen können. Das Skript zum Ausführen dieses Servers befindet sich im Ordner bin der Python-Installation und heißt classic.py. Wir können es in der Python-Eingabeaufforderung ausführen und überprüfen, ob es als lokaler Server ausgeführt wird.

python bin/classic.py

Wenn wir das obige Programm ausführen, erhalten wir die folgende Ausgabe:

INFO:SLAVE/18812:server started on [127.0.0.1]:18812

Ausführen eines Clients

Als nächstes führen wir den Client mit dem rpyc-Modul aus, um einen Remoteprozeduraufruf auszuführen. Im folgenden Beispiel führen wir die Druckfunktion auf dem Remote-Server aus.

import rpyc
conn = rpyc.classic.connect("localhost")
conn.execute("print('Hello from Tutorialspoint')")

Wenn wir das obige Programm ausführen, erhalten wir die folgende Ausgabe:

Hello from Tutorialspoint

Expressionsbewertung durch RPC

Anhand der obigen Codebeispiele können wir die in Python integrierten Funktionen zur Ausführung und Auswertung von Ausdrücken über rpc verwenden.

import rpyc
conn = rpyc.classic.connect("localhost")
conn.execute('import math')
conn.eval('2*math.pi')

Wenn wir das obige Programm ausführen, erhalten wir die folgende Ausgabe:

6.283185307179586