注解
自 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 求和。
add_one
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 能正确处理函数间的依赖,在分布式环境,用户不需要关心在各个 worker 间数据是怎么流动的,Mars 能自动正确处理。
mars.remote.spawn
.execute()
参考 Mars remote 使用指南 获取更多信息。