Python - Appel de procédure distante

Le système d'appel de procédure à distance (RPC) vous permet d'appeler une fonction disponible sur un serveur distant en utilisant la même syntaxe que celle utilisée lors de l'appel d'une fonction dans une bibliothèque locale. Ceci est utile dans deux situations.

  • Vous pouvez utiliser la puissance de traitement de plusieurs machines à l'aide de rpc sans changer le code pour appeler les programmes situés dans les systèmes distants.
  • Les données nécessaires au traitement ne sont disponibles que dans le système distant.

Ainsi, en python, nous pouvons traiter une machine comme un serveur et une autre machine comme un client qui appellera le serveur pour exécuter la procédure distante. Dans notre exemple, nous allons prendre l'hôte local et l'utiliser à la fois comme serveur et client.

Exécuter un serveur

Le langage python est livré avec un serveur intégré que nous pouvons exécuter en tant que serveur local. Le script pour exécuter ce serveur se trouve sous le dossier bin de l'installation de python et nommé classic.py. Nous pouvons l'exécuter dans l'invite python et vérifier son exécution en tant que serveur local.

python bin/classic.py

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

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

Exécuter un client

Ensuite, nous exécutons le client à l'aide du module rpyc pour exécuter un appel de procédure à distance. Dans l'exemple ci-dessous, nous exécutons la fonction d'impression sur le serveur distant.

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

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

Hello from Tutorialspoint

Évaluation des expressions via RPC

En utilisant les exemples de code ci-dessus, nous pouvons utiliser les fonctions intégrées de python pour l'exécution et l'évaluation d'expressions via rpc.

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

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

6.283185307179586