Python 与IPY并行群集共享队列
我正在尝试集成Python 与IPY并行群集共享队列,python,python-multiprocessing,ipython-parallel,Python,Python Multiprocessing,Ipython Parallel,我正在尝试集成ipyparallel,作为我的主从架构中多处理的替代方案 即,当前所有进程都有两个队列: 一个用于从主任务到从任务 从奴隶到主人的结果 目前,我使用multiprocessing.Manager().Queue()队列进行通信。但是,它们似乎无法与ipyparallel进程共享 我之所以这么做(不仅仅是通过函数),是因为从头开始“设置”工人几乎和执行计算一样昂贵(计算方面)。我更喜欢运行一个函数(通过map\u async或类似功能),该函数将在工作人员上设置环境,执行第一次
ipyparallel
,作为我的主从架构中多处理
的替代方案
即,当前所有进程都有两个队列:
- 一个用于从主任务到从任务
- 从奴隶到主人的结果
multiprocessing.Manager().Queue()
队列进行通信。但是,它们似乎无法与ipyparallel
进程共享
我之所以这么做(不仅仅是通过函数),是因为从头开始“设置”工人几乎和执行计算一样昂贵(计算方面)。我更喜欢运行一个函数(通过map\u async
或类似功能),该函数将在工作人员上设置环境,执行第一次计算,将结果推送到结果队列,然后从任务队列中获取(明显更小的)更新,并重复最后两个步骤,直到停止(再次通过队列)
如果有更好的方法/框架来完成这类任务(但必须是python),我洗耳恭听
多亏了IPython parallel,通常使用DirectView进行“设置”,然后将依赖该设置的较小任务作为传递给负载平衡视图的函数分发 设置客户端和视图:
import ipyparallel as ipp
rc = ipp.Client()
dview = rc[:]
lbview = rc.load_balanced_view()
使用direct view进行设置:
dview.execute("data = setup()")
现在,您可以使用ipp在任务中依赖它。参考
:
def task(data):
analyze(data)
rdata = ipp.Reference('data')
ar = view.apply(task, rdata)
result = ar.get()
通过这种方式,您可以在任何地方执行一次设置,然后以负载平衡的方式运行依赖于该设置的任务。使用IPython并行,通常使用DirectView执行“设置”,然后将依赖于该设置的较小任务作为传递给负载平衡视图的函数分发 设置客户端和视图:
import ipyparallel as ipp
rc = ipp.Client()
dview = rc[:]
lbview = rc.load_balanced_view()
使用direct view进行设置:
dview.execute("data = setup()")
现在,您可以使用ipp在任务中依赖它。参考
:
def task(data):
analyze(data)
rdata = ipp.Reference('data')
ar = view.apply(task, rdata)
result = ar.get()
通过这种方式,您可以在任何地方执行一次设置,然后以负载平衡的方式运行依赖于该设置的任务