如何将对象添加到多处理过程?

问题描述 投票:0回答:1

我习惯使用ipcluster中的ipyparallel,在这里我可以通过dview['object'] = object将对象上载到工作人员。

我想知道如何使用multiprocessing执行此操作。我希望它是异步的,因此我最终可以将已完成显示进度条的作业制成表格,但是目前,我主要感兴趣的是上载对象(例如,大内存数据框),这样我就不必用函数传递它,从而减慢速度:

from ipyparallel import Client
import pandas as pd

rc = Client(profile='default')
dview = rc[:]
lview = rc.load_balanced_view()

myobject = pd.read_table('/some/path/')
#                                  ############################################
dview['myobject'] = myobject       #### <- how do I do this using multiprocess?
#                                  ############################################

def dowork(rowstart):
    rowend = rowstart + (1000-1)
    ...
    return pd.DataFrame(work)

jobs = []
for i in range(0,len(myobject.index),1000):
    jobs.append(lview.apply_async(dowork, i))

newdf = pd.concat([j.r for j in jobs])
memory parallel-processing ipython pool multiprocess
1个回答
0
投票

Q如何使用multiprocessing执行此操作?

根据定义,python中基于进程的并行性将python解释器的整个状态(包括其所有内部变量等)复制到新的工作进程实例化后。操作系统决定如何完成或无法完成(有关所有详细信息,风险和其他缺陷,请阅读multiprocessing文档)。

虽然这是一个昂贵但主要需要的步骤,以便摆脱所有python处理的中央GIL锁垄断重新实现,但是此方法可确保您的进程“知道” [SERIAL]设计(myobject必须将对象重新广播到所有远程节点,并且由于成本增加了几个数量级(从几百个icluster到远高于[C0 ])的本地/远程[ns]操作+ L2 / L3网络级传输服务的延迟,它使您不必担心会分散您的代码所需的所有对象,而要在工作要进行之前手动进行分配启动。并置[ms]生成的进程“知道”与父python解释器相同的内容,因此在这种情况下您的生活变得更加轻松。

© www.soinside.com 2019 - 2024. All rights reserved.