【问题标题】:Passing functions are parameters in RPyC传递函数是 RPyC 中的参数
【发布时间】:2014-07-19 00:24:32
【问题描述】:

我正在尝试将一大堆逻辑封装到一个 Python 函数中,并将其作为参数传递给我想在服务器上执行的远程 RPyC 方法。但 RPyC 将函数视为回调并在本地执行。有办法解决吗?我可以强制服务器在服务器上而不是在客户端上执行它吗?

谢谢。

【问题讨论】:

  • 你能举一个你想运行的函数的例子吗?该函数是已经在服务器进程中定义的,还是一段随机的代码?即使您将完整的函数作为字符串传递,也不可能传递其整个上下文(全局变量、名称绑定、它可能调用的外部包......)

标签: python rpyc


【解决方案1】:

teleport_function 允许我将功能从客户端传输到服务器。

http://rpyc.readthedocs.org/en/latest/api/utils_classic.html#rpyc.utils.classic.teleport_function

【讨论】:

    【解决方案2】:

    RPyC 似乎传输int, long, bool, str, float, unicode, bytes, slice, complex, tuple (of simple types), forzenset (of simple types) as well as the following singletons: None, NotImplemented, and Ellipsis(来自the RPyC manual),因此您可以发送unicode,您可以将代码作为字符串发送,eval 它是服务器端。

    请注意,如果您这样做,我将能够在您的服务器上发送os.unlink(sys.argv[0]) 之类的内容,或者您​​可能不想要的此类内容。换句话说,允许服务器运行任意代码是一个巨大的安全漏洞。

    因此,如果您在服务器到服务器的情况下,这是可行的,但我认为您并不需要它,如果您完全信任双方,但如果它是客户端-服务器应用程序,那就不行了。

    如果您决定采用这种方式,那么 eval 可能不是正确的选择,它会过多地打开您的服务器。你已经探索了一些限制可能性的方法,根据你想让你的bunch of logic做什么,搜索“python eval security”,你会发现一些有趣的线程。

    【讨论】:

    • Tomer Filiba(RPyC 的作者)指出了库中的 teleport_function,这正是我正在寻找的。​​span>
    猜你喜欢
    • 2015-06-08
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 2013-01-27
    • 2018-06-30
    • 2021-04-13
    相关资源
    最近更新 更多