python - 如何将python代码发送到另一台机器执行?

标签 python amazon-web-services

我正在 AWS 上构建测试应用程序。我有一台拥有该应用程序的“主”机器。有时,我希望能够将处理卸载到一些按需从属机器上。假设有一个实例化的从站,只需要最少的软件(不包括我的主应用程序),我如何才能将 Python 代码的功能单元“发送”到一个或多个从站以执行?

我知道并接受这种架构由于多种原因可能不是最优的 - 我知道如果我可以在启动时在我的实例上预安装相关代码,它会更简单。但是,假设我们有一个硬约束,即不能在操作系统和一些基本库之外预加载从实例 - 例如,如果我想在另一台机器上喷射一些生成的代码怎么办?

编辑:StackOverflow 是一个非常热门的资源!感谢大家的回复。惊人的。给我几天时间,我会回来报告。

最佳答案

这个问题我已经遇到过好几次了。

选项 1 - eval()

当我想快速破解一些东西时,我使用 eval()或者它在 stdlib 中的表亲之一。将源代码传输给你的主人,然后编译和评估:

src = getSourceFromMaster()
obj = compile(src, "master.py", "exec")
exec(obj)

只要您从客户端到服务器获取源的传输是值得信赖的,并且源需要采取的操作相对简单,这就可行。有几次我需要主从机器之间更紧密的集成,需要大量的来回处理或复杂的数据结构。在那些情况下,我使用 Pyro .

选项 2 - 火焰兵

Pyro是一个完整的、跨平台的 Python 远程方法执行库。我在生产环境中使用它来将处理从 linux 机器发送到 windows 机器并返回,它非常稳定。

他们文档中的示例:

大师:

# save this as greeting.py
class GreetingMaker(object):
    def get_fortune(self, name):
        return "Hello, {0}. Here is your fortune message:\n" \
               "Behold the warranty -- the bold print giveth and the fine print taketh away.".format(name)

奴隶:

# save this as client.py
import greeting
name=raw_input("What is your name? ")
greeting_maker=greeting.GreetingMaker()
print greeting_maker.get_fortune(name)

输出:

$ python client.py
What is your name? Irmen
Hello, Irmen. Here is your fortune message:
Behold the warranty -- the bold print giveth and the fine print taketh away.

Pyro 最棒的地方在于 client.py 中的“import greeting”行——该代码来自服务器。

如果您从裸操作系统安装开始,则可以在启动新实例后立即使用 SSH 下推 python 脚本来托管客户端代码。然后你就会有一个很好的基础设施来工作。

我无法再详细说明这两者在 AWS 上的应用,也无法详细说明它们与 AWS 基础设施提供的实用程序相比如何。欢迎提出意见或讨论。

关于python - 如何将python代码发送到另一台机器执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7029157/

相关文章:

python - 谷歌API上的凭据不足

amazon-web-services - 将数据(增量)加载到 Amazon Redshift、S3 与 DynamoDB 与插入

amazon-web-services - 为什么我的 [] 没有压平我的 jmespath 数组

amazon-web-services - AWS SAM 使用可选的 Transform 进行部署

ssl - 多个图像请求的 Amazon ssl 效率

linux - Docker K8s 优化镜像以减少加载时间

python - DataFrame 中基于标签的安全选择

python - 在 python 中使用子进程检查 ping 是否成功

python - 如何在新行的列表中的每个单词字母之间打印一个空格?

python - numpy 是否覆盖了 == 运算符,因为我无法理解遵循 python 代码