2016-04-25 88 views
0

我正在尝试将ipyparallel作为multiprocessing在我的主 - 从属体系结构中的替代方案。与ipyparallel群集共享队列

也就是说,目前所有的进程有两个队列:

  • 一个从主任务奴隶
  • 一个从奴隶结果掌握。

目前我使用multiprocessing.Manager().Queue()队列进行通信。但看起来它们不能与ipyparallel进程共享。

我这样做的原因(而不仅仅是通过函数)是因为从头开始设置工作人员几乎与执行计算一样昂贵(在计算方面)。我倾向于运行一个函数(通过map_async或类似的方法)来设置工作环境,执行第一次计算,将结果推送到结果队列,然后从任务队列中获取(显着更小)的更新并重复最后几步直到停止(再次通过队列)。

如果对这类任务有一个更好的方法/框架(它必须是python,但是),我全是耳朵。

由于

回答

2

随着IPython的并行,它是常见的做“设置”与DirectView的,然后分发依赖于该设置为传递给负载平衡的视图函数较小的任务。

设置客户端和看法:使用ipp.Reference

dview.execute("data = setup()") 

您现在可以依靠,在你的任务:

import ipyparallel as ipp 

rc = ipp.Client() 
dview = rc[:] 
lbview = rc.load_balanced_view() 

请在直视你的设置

def task(data): 
    analyze(data) 

rdata = ipp.Reference('data') 
ar = view.apply(task, rdata) 
result = ar.get() 

通过这种方式,您可以在任何地方进行一次设置,然后运行依赖于以负载平衡的方式进行设置。