我正在尝试将ipyparallel
作为我的主 - 奴隶架构中multiprocessing
的替代。
即,目前所有进程都有两个队列:
目前我使用multiprocessing.Manager().Queue()
个队列进行通信。但是,它们似乎无法与ipyparallel
进程共享。
我这样做的原因(而不仅仅是通过功能)是因为"设置"从头开始的工人几乎和执行计算一样昂贵(计算方面)。我更喜欢运行一个函数(通过map_async
或类似的函数)来设置工作者的环境,执行第一次计算,将结果推送到结果队列,然后获取(显着更小)更新从任务队列中重复最后几个步骤直到停止(再次通过队列)。
如果有更好的方法/框架来完成这类任务(不过它必须是python),我全心全意。
由于
答案 0 :(得分:4)
使用IPython并行时,通常使用DirectView进行“设置”,然后将依赖于该设置的较小任务分发为传递给负载平衡视图的函数。
设置您的客户端和观看次数:
import ipyparallel as ipp
rc = ipp.Client()
dview = rc[:]
lbview = rc.load_balanced_view()
使用直接视图进行设置:
dview.execute("data = setup()")
现在,您可以使用ipp.Reference
:
def task(data):
analyze(data)
rdata = ipp.Reference('data')
ar = view.apply(task, rdata)
result = ar.get()
通过这种方式,您可以在任何地方进行一次设置,然后以负载平衡的方式运行依赖于该设置的任务。