J'ai un module appelé foobar
et il contient un tas de fonctions que je voudrais appeler à distance.Exposer un tas de fonctions à travers Pyro
Ma solution actuelle consiste à emballer toutes ces fonctions comme des méthodes statiques dans une classe et à partager cela.
Voici mon code:
pyro_server.py:
import Pyro4
import foobar
import inspect
Pyro4.config.REQUIRE_EXPOSE = False
import my_custom_pyro_config as pyro_config
def module_to_class(module):
class Wrapper:
pass
for name, func in inspect.getmembers(module, inspect.isfunction):
setattr(Wrapper, name, staticmethod(func))
return Wrapper
def main():
name_server = Pyro4.locateNS(host=pyro_config.IP, port=pyro_config.NS_PORT)
daemon = Pyro4.Daemon(host=pyro_config.IP, port=pyro_config.PYRO_PORT)
foobar_uri = daemon.register(module_to_class(foobar))
name_server.register("foobar", foobar_uri)
print("Entering request loop")
daemon.requestLoop()
Il fonctionne, mais il se sent sorte de ... louches
est-il une meilleure façon de le faire? Je suis ouvert à la commutation vers une autre bibliothèque RPC
Remerciements Irmen. Je suppose que je n'ai pas pensé à utiliser la flamme car c'est trop puissant/dangereux/effrayant – user357269
oui c'est, c'est pourquoi envelopper explicitement les choses que vous voulez exposer dans une classe et exporter c'est la route sûre –