Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 与IPY并行群集共享队列_Python_Python Multiprocessing_Ipython Parallel - Fatal编程技术网

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()
通过这种方式,您可以在任何地方执行一次设置,然后以负载平衡的方式运行依赖于该设置的任务