远程执行任意python代码-可以吗?

2024-06-28 11:57:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究一个网格系统,它有许多非常强大的计算机。这些函数可用于非常快速地执行python函数。我的用户有许多python函数,这些函数在工作站上需要很长时间才能计算,理想情况下,他们希望能够调用远程强大服务器上的一些函数,但这些函数似乎是在本地运行的。

Python有一个名为“apply”的旧函数——现在Python支持扩展的调用语法(例如.*arguments),这几乎是没用的,但是我需要实现一些类似这样的功能:

rapply = Rapply( server_hostname ) # Set up a connection
result = rapply( fn, args, kwargs ) # Remotely call the function
assert result == fn( *args, **kwargs ) #Just as a test, verify that it has the expected value. 

Rapply应该是一个类,可以用来在远程服务器上远程执行一些任意代码(fn可以是任何东西)。它将返回rapply函数将返回的结果。“result”的值应该与我在本地调用函数时的值相同。

现在让我们假设fn是一个用户提供的函数,我需要某种方式将它通过线路发送到执行服务器。如果我能保证fn总是简单的,它可以是一个包含python源代码的字符串。。。但如果不是那么简单呢?

如果fn可能有本地依赖关系:它可能是一个使用在不同模块中定义的类的简单函数,是否有封装fnfn所需的所有非标准库的东西的方法?理想的解决方案不需要这个系统的用户对python开发有太多的了解。他们只想编写函数并调用它。

为了澄清,我不想讨论什么样的网络协议可以用来实现客户机和服务器之间的通信。我的问题是如何将函数及其依赖项封装为一个可以序列化和远程执行的对象。

我对在远程服务器上运行任意代码的安全性也不感兴趣——让我们说一下,这个系统纯粹是为了研究,而且它是在一个防火墙严密的环境中。


Tags: the函数代码用户服务器网格远程系统
3条回答

您可以使用现成的集群解决方案,如Parallel Python。您可以相对轻松地设置multiple remote slaves and run arbitrary code on them

看看PyRO(Python远程对象),它能够在集群中的所有计算机上设置服务,并通过名称服务器和发布-订阅机制直接或间接调用它们。

听起来你想做以下事情。

  • 定义共享文件系统空间。

  • 将所有python源代码放在这个共享文件系统空间中。

  • 定义将“execfile”一块代码的简单代理或服务器。

  • 然后,您的客户联系代理(REST协议和POST方法对于
    这)与代码块。 代理保存代码块并对该代码块执行execfile

由于所有代理共享一个公共文件系统,所以它们都具有相同的Python库结构。

我们使用一个称为“批处理服务器”的简单WSGI应用程序。我们有用于创建和检查远程请求的RESTful协议。

相关问题 更多 >