Выставление связки функций через 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