Python: llamada a procedimiento remoto

El sistema de llamada a procedimiento remoto (RPC) le permite llamar a una función disponible en un servidor remoto usando la misma sintaxis que se usa cuando se llama a una función en una biblioteca local. Esto es útil en dos situaciones.

  • Puede utilizar la potencia de procesamiento de varias máquinas utilizando rpc sin cambiar el código para realizar la llamada a los programas ubicados en los sistemas remotos.
  • Los datos necesarios para el procesamiento están disponibles solo en el sistema remoto.

Entonces, en Python podemos tratar una máquina como un servidor y otra como un cliente que hará una llamada al servidor para ejecutar el procedimiento remoto. En nuestro ejemplo, tomaremos el localhost y lo usaremos como servidor y como cliente.

Ejecutando un servidor

El lenguaje Python viene con un servidor incorporado que podemos ejecutar como servidor local. El script para ejecutar este servidor se encuentra en la carpeta bin de la instalación de Python y se denomina classic.py. Podemos ejecutarlo en el indicador de Python y verificar que se esté ejecutando como un servidor local.

python bin/classic.py

Cuando ejecutamos el programa anterior, obtenemos el siguiente resultado:

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

Ejecutando un cliente

A continuación, ejecutamos el cliente usando el módulo rpyc para ejecutar una llamada a procedimiento remoto. En el siguiente ejemplo, ejecutamos la función de impresión en el servidor remoto.

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

Cuando ejecutamos el programa anterior, obtenemos el siguiente resultado:

Hello from Tutorialspoint

Evaluación de expresiones a través de RPC

Usando los ejemplos de código anteriores, podemos usar las funciones integradas de Python para la ejecución y evaluación de expresiones a través de rpc.

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

Cuando ejecutamos el programa anterior, obtenemos el siguiente resultado:

6.283185307179586