Выставление связки функций через Pyro

У меня есть модуль под названием foobar и он содержит набор функций, которые я хотел бы вызвать удаленно.

Мое текущее решение - обернуть все эти функции как статические методы в классе и поделиться им.

Вот мой код:

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()

Это работает, но кажется немного хитрым...

Есть лучший способ сделать это? Я открыт для перехода на другую библиотеку RPC

1 ответ

Используйте функцию Pyro " Flame". Это позволяет осуществлять прямой удаленный доступ к модулю на сервере без необходимости выставлять участников вручную.

>>> import Pyro4.utils.flame
>>> Pyro4.config.SERIALIZER="pickle"
>>> fl = Pyro4.utils.flame.connect("localhost:55225")  # use whatever location the flame server is running on
>>> s = fl.module("sys")
>>> s.stdout.write("foobar\n")
7    
# ...and observe 'foobar' being written to the server's output
Другие вопросы по тегам