分布式python编程



我正试图将python程序的执行拆分到两台不同的机器上。我想知道是否有一种方法可以从另一台机器调用一台机器上的python解释器。不是在另一台机器上运行脚本,而是将执行任务拆分为两台机器。

在接下来的几个月里,我将教授我的自分布式编程,我认为这将是一个很好的开始方式。

我认为第一步是使用一台机器调用另一台机器,并将程序的一部分发送给它。然后下一步将是两台机器一起执行相同的程序并进行通信以避免出现问题。第三步是三台机器等。

建议、提示和想法都是受欢迎的。。。

免责声明:我是SCOOP的开发人员。

你可能想了解分布式处理的基于数据的技术是MPI标准(对于多台计算机,使用mpi4py[preferred]或pympi)和允许远程计算的标准多处理模块(但在我看来很尴尬)。

不过,您应该从基于任务的框架开始。它们提供了一种简单且用户友好的使用方式。这两个都是创建SCOOP时最关注的问题。你可以用pip -U scoop试试。在Windows上,您可能希望首先使用其可执行安装程序安装PyZMQ。您可以查看提供的示例并使用各种参数来轻松了解性能下降或提高的原因。我鼓励你将其与类似工作的Celery等替代品进行比较。

这两个框架都允许远程启动Python程序。更重要的是,它为您进行并行处理,而您只需要将任务提供给他们。

您可能需要检查Fabric,以获得一种简单的方式来设置远程环境,甚至远程控制或启动脚本。

看看Ray,它是一个用于编写并行和分布式Python的库。

Ray使用相同的语法在单个多核机器上和分布式环境中并行化代码。

如果将@ray.remote装饰器添加到函数中,它可以并行异步执行(在集群中的任何机器上)。远程函数调用返回期货,其值可以使用ray.get检索。

Python类(而不是函数)也可以做同样的事情,请参阅参与者的文档。

import ray
import time
ray.init()
@ray.remote
def function(x):
    time.sleep(1)
    return x
args = [1, 2, 3, 4]
# Submit 4 tasks in parallel.
result_ids = [function.remote(x) for x in args]
# Retrieve the results. Assuming at least 4 cores,
# this will take 1 second.
results = ray.get(result_ids)

有关详细信息,请参见Ray文档。注意,我是Ray的开发人员之一。

Python[1][2]有MPI版本。

MPI(消息传递接口)是一个标准化的接口,它很酷,因为你也可以在C、Java、(Fortran)等中找到它。

它使您能够在远程运行的进程之间进行通信。您可以使用这些消息进行同步和信息传递。

您也有集体操作,如broadcastgatherreduce

看看RPyC,你可能会发现它很有用。

最新更新