我正在尝试将 python 程序的执行拆分到两台不同的机器上。我想知道是否有办法从另一台机器上调用 python 解释器。不在另一台机器上运行脚本,而是将执行任务拆分到两台机器上。
在接下来的几个月里,我将教授我的自我分布式编程,我认为这是一个很好的开始。
我认为第一步是使用一台机器调用另一台机器并发送一段程序。然后下一步将是两台机器一起执行相同的程序并进行通信以避免问题。第三步将是三台机器等。
欢迎提供建议、提示和想法……
我正在尝试将 python 程序的执行拆分到两台不同的机器上。我想知道是否有办法从另一台机器上调用 python 解释器。不在另一台机器上运行脚本,而是将执行任务拆分到两台机器上。
在接下来的几个月里,我将教授我的自我分布式编程,我认为这是一个很好的开始。
我认为第一步是使用一台机器调用另一台机器并发送一段程序。然后下一步将是两台机器一起执行相同的程序并进行通信以避免问题。第三步将是三台机器等。
欢迎提供建议、提示和想法……
Disclamer:我是 SCOOP 的开发者。
对于分布式处理,您可能想要熟悉的基于数据的技术将是 MPI 标准(对于多计算机,使用 mpi4py [首选] 或 pympi)和允许远程计算的标准多处理模块(但在我看来很尴尬)。
不过,您应该从基于任务的框架开始。它们提供了简单且用户友好的用法。在创建SCOOP时,这两个都是最大的焦点。你可以用pip -U scoop
. 在 Windows 上,您可能希望首先使用其可执行安装程序安装 PyZMQ 。您可以检查提供的示例并使用各种参数来轻松了解导致性能下降或提高的原因。我鼓励您将它与类似工作的Celery等替代品进行比较。
这两个框架都允许远程启动 Python 程序。更重要的是,它为您执行并行处理,而您只需为它们提供任务。
您可能想要检查Fabric以轻松设置远程环境,甚至远程控制或启动脚本。
查看Ray,这是一个用于编写并行和分布式 Python 的库。
Ray 使用相同的语法在单个多核机器上和分布式环境中并行化代码。
如果将@ray.remote
装饰器添加到函数中,它可以并行异步执行(在集群中的任何机器上)。远程函数调用返回期货,其值可以用ray.get
.
使用 Python 类(而不是函数)也可以做同样的事情,请参阅有关 actor 的文档。
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)等中找到它。
它使您能够在远程运行的进程之间进行通信。您使用这些消息进行同步和信息传递。
你也有集体操作,比如broadcast
, gather
,reduce
看看RPyC,你可能会发现它很有用。