我必须使用次优API到计算群集,其工作方式如下:
run(func, args)
其中func
是一个函数,args
是一个参数列表。 run
将args
中的每个arg与func
的(副本)一起发送给群集的单独工作人员,以便它可以执行func(arg)
并报告结果。 run(func, args)
然后返回从工作人员汇总的结果列表。 func
在每个工人的清洁和密封环境中执行。这意味着如果func
使用任何非标准库,则工作者可能没有库,并且当func
执行时,库/模块不会在命名空间中。现在,这两个问题通过以下方式解决:
attach(file)
函数,file
可以是模块或脚本。这会将给定的file
发送给每个工作人员,以便库import
中添加func
语句,以便命名空间符合worker的预期。这会导致恼人的代码,如:
import lib
# Code agnostic to being executed on a cluster.
def foo(x):
return lib.method(2)
...
# At this point we want to executed some of our code on the cluster.
def job(x):
import lib
return foo(x)
cluster = Cluster()
cluster.attach(lib)
results = cluster.run(job, [1,2,3])
库需要导入两次(并且在job
中正确导入)并手动附加到群集。
只需给出func
,我可以自动管理群集的库/模块吗?更具体地说,有没有一种方法可以收集执行func
所需的所有模块,将它们发送到具有attach
的集群,并装饰func
以导入这些模块一次集群(基本上复制了func
在执行时可用的命名空间)?
谢谢!