python - 通过 Pyro 暴露一堆函数

标签 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):
    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 的“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

关于python - 通过 Pyro 暴露一堆函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44759995/

相关文章:

java - ZeroMQ 用于移动 Protocol Buffer 有效负载的替代方案是什么?

python - Pyro4:在不尝试返回子对象的情况下调用远程子对象的方法

python-3.x - Pyro4 连接 python2 到 python3

python - pandas 将第二列堆叠在第一列下方,反之亦然

authentication - RPC验证错误

java - Java 程序与非 JDK 对象之间的通信

python - Pyro 信号安全吗?

python - FASTAPI 记录到文件

python - Pandas GroupBy 内存释放

python - 如何从嵌套数组/字典/对象在 python 中生成 json 文件