Mars Remote

注解

自 0.4.1 起支持

Mars Remote 提供了简单但强大的方式来并行执行一系列 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_onesum_all 的地方换成了 mars.remote.spawnmars.remote.spawn 不会触发执行,只会返回一个 Mars 对象,这个对象能用作别的 mars.remote.spawn 函数的参数。一旦调用 .execute(),10次 add_one 会并行执行。当它们运行完成后,sum_all 会自动被触发执行。Mars 能正确处理函数间的依赖,在分布式环境,用户不需要关心在各个 worker 间数据是怎么流动的,Mars 能自动正确处理。

参考 Mars remote 使用指南 获取更多信息。