Python - Chiamata a procedura remota

Il sistema RPC (Remote Procedure Call) consente di chiamare una funzione disponibile su un server remoto utilizzando la stessa sintassi utilizzata quando si chiama una funzione in una libreria locale. Ciò è utile in due situazioni.

  • È possibile utilizzare la potenza di elaborazione di più macchine utilizzando rpc senza modificare il codice per effettuare la chiamata ai programmi situati nei sistemi remoti.
  • I dati necessari per l'elaborazione sono disponibili solo nel sistema remoto.

Quindi in python possiamo trattare una macchina come un server e un'altra macchina come un client che effettuerà una chiamata al server per eseguire la procedura remota. Nel nostro esempio prenderemo localhost e lo useremo sia come server che come client.

Eseguire un server

Il linguaggio Python viene fornito con un server integrato che possiamo eseguire come server locale. Lo script per eseguire questo server si trova nella cartella bin dell'installazione di Python e denominato classic.py. Possiamo eseguirlo nel prompt di python e controllarne l'esecuzione come server locale.

python bin/classic.py

Quando eseguiamo il programma sopra, otteniamo il seguente output:

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

Esecuzione di un client

Successivamente eseguiamo il client utilizzando il modulo rpyc per eseguire una chiamata di procedura remota. Nell'esempio seguente eseguiamo la funzione di stampa nel server remoto.

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

Quando eseguiamo il programma sopra, otteniamo il seguente output:

Hello from Tutorialspoint

Valutazione delle espressioni tramite RPC

Usando gli esempi di codice sopra possiamo usare le funzioni integrate di python per l'esecuzione e la valutazione di espressioni tramite rpc.

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

Quando eseguiamo il programma sopra, otteniamo il seguente output:

6.283185307179586