Python 通过Pyro暴露一系列功能

Python 通过Pyro暴露一系列功能,python,rpc,pyro,pyro4,Python,Rpc,Pyro,Pyro4,我有一个名为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): cl

我有一个名为
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库

使用Pyro的“”功能。它允许直接远程访问服务器上的模块,而无需手动公开成员

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

谢谢你,伊尔曼。我想我没有想到使用flame,因为它太强大/不安全/可怕了,这就是为什么要在类中显式地包装要公开的内容,并导出这是安全的途径