Mars 远程#
注意
版本 0.4.1 的新功能
Mars远程提供了一种简单但强大的方式来并行执行Python函数。
假设我们有以下代码。
>>> def add_one(x):
>>> return x + 1
>>>
>>> def sum_all(xs):
>>> return sum(xs)
>>>
>>> x_list = []
>>> for i in range(10):
>>> x_list.append(add_one(i))
>>>
>>> print(sum_all(x_list))
55
在这里,我们调用 add_one 10 次,然后调用 sum_all 来获取总和。
为了使10 add_one 并行运行,我们可以将代码重写如下。
>>> import mars.remote as mr
>>>
>>> def add_one(x):
>>> return x + 1
>>>
>>> def sum_all(xs):
>>> return sum(xs)
>>>
>>> x_list = []
>>> for i in range(10):
>>> x_list.append(mr.spawn(add_one, args=(i,)))
>>> print(mr.spawn(sum_all, args=(x_list,)).execute().fetch())
55
这段代码与之前的非常相似,除了将对 add_one 和 sum_all 的调用替换为 mars.remote.spawn。 mars.remote.spawn 不会触发执行,而是返回一个 Mars 对象,该对象可以作为参数传递给另一个 mars.remote.spawn。 一旦触发 .execute(),10 个 add_one 将并行运行。 一旦它们完成,sum_all 将被触发。 Mars 可以正确处理依赖关系,对于分布式设置,用户无需担心不同工作者之间的数据移动,Mars 可以自动处理它们。
有关更多信息,请参考 Mars 远程指南。