并行/多处理中的更多函数将使用相同的DataFrame



我正在用pd.read_csv打开一个.csv,并将其转换为DataFrame。DataFrame需要进行一些更改以进行相应的缩放。缩放需要几分钟时间,因此应该只缩放一次。

data = pd.DataFrame(pd.read_csv(...))
for index, row in data.iterrow():
data['specific_column'][index] = data['specific_column'][index] * (different scaling factors)
etc.

然后有几个函数用这个缩放的df做不同的事情,我希望这些函数同时运行以节省一些时间。

def function1(input_data, arg1 ....)
do something
def function2(input_data, arg1 ....)
do something
etc.
if __main__=='__name__':
process1 = multiprocessing.Process(target=function1, args=(data, arg1, ....)
process2 = multiprocessing.Process(target=function1, args=(data, arg1, ....)
etc.
processes = [process1, process2, ....]
process1.start()
process2.start()
.....
for process in processes:
process.join()

我注意到这些进程是一个接一个地运行的(不是并行的(,.csv在每个进程之后都会重新打开并缩放,我知道每个进程都是从顶部一直重复代码开始的,但重新缩放DataFrame需要太多时间。我想唯一的问题是,缩放后的DataFrame需要在内存中相乘(我想类似于yield(,每个副本都要由函数单独使用。(每个功能复制一份(

我认为这应该是一个简单的解决方案,但由于在多处理领域相对较新,我自己找不到那个解决方案。请帮忙。。。

无论何时调用原始DataFrame,都使用.copy((函数来解决此问题,并在if__main__='name'内创建可变数据

def function1(input_data, arg1 ....)
do something
def function2(input_data, arg1 ....)
do something
etc.
if __main__=='__name__':
data = pd.DataFrame('data.csv')
process1 = multiprocessing.Process(target=function1, args=(data.copy(), arg1, ....)
process2 = multiprocessing.Process(target=function1, args=(data.copy(), arg1, ....)
etc.
processes = [process1, process2, ....]
process1.start()
process2.start()
.....
for process in processes:
process.join()

最新更新