在多处理python之间执行任务

在多处理python之间执行任务,python,pandas,multiprocessing,Python,Pandas,Multiprocessing,我想使用多处理库来并行计算。如果您注释第5行和第9行并取消注释第11行,我们可以以串行方式运行此代码 我的数据帧非常大,占用了很多时间,所以我想使用多处理 import numpy as np import pandas as pd def do_something (df): return df def main(df,df_hide,df_res): for i in range(0,df_hide.shape[0]): df = df.a

我想使用多处理库来并行计算。如果您注释第5行和第9行并取消注释第11行,我们可以以串行方式运行此代码

我的数据帧非常大,占用了很多时间,所以我想使用多处理

import numpy as np
import pandas as pd   

def do_something (df):
    return df

def main(df,df_hide,df_res):
    for i in range(0,df_hide.shape[0]):
    
        df = df.append(df_hide.iloc[i,:])
        df_res.iloc[i,0] = df.iloc[-1,0] 
    
return df_res
    
if __name__ == '__main__':   
    df = pd.DataFrame({'a':[1,2,3]})
    df_hide = pd.DataFrame({'a':[4,5,6]})
    df_res = pd.DataFrame({'z':[0,0,0]})

    df_res1 = main(df,df_hide,df_res)
    print(df_res1)
这就是我正在尝试的

def do_something (df):
    return df

def main(df,df_hide,df_res):
    p = Pool() # comment to run normal way
    for i in range(0,df_hide.shape[0]):
        
        df = df.append(df_hide.iloc[i,:])
        df = p.map(do_something,df) # comment to run normal way
        
        #df = do_something(df) # uncomment to run normal way
        
        df_res.iloc[i,0] = df.iloc[-1,0] 
        
    return df_res
        
if __name__ == '__main__':   
    df = pd.DataFrame({'a':[1,2,3]})
    df_hide = pd.DataFrame({'a':[4,5,6]})
    df_res = pd.DataFrame({'z':[0,0,0]})

    df_res1 = main(df,df_hide,df_res)
    print(df_res1)
例外输出如果我正常运行它就会出现

   z
0  4
1  5
2  6

这没给我什么,它冻结了cmd。无论如何,如果我运行它,我认为我不会得到预期的结果。因为我必须做一些事后处理的事情。您能否建议如何使用多处理并行化上述代码。

您想做什么?是否正在将列“a”复制到列“z”中?最好有一个更好的例子。无论如何,
map
的第二个参数应该是一个iterable,在这种情况下,它是一个数据帧……是的,我只是将列“a”复制到列“z”,如果只是在我的真实场景中做一些事情,只是让您知道我将需要这些列值。哦,我怎样才能把df改成iterable,我的意思是我怎样才能把我的数据传递给我的函数?如果你能提供一个更好的例子,我可以试着帮助你。可以对行或列进行并行化。因此,如果您有4个内核,那么您可以同时处理4行(或4列),而不是1行。在您的示例中,
do\u something(df)
无法并行化,因为它不接受单个行(或列)作为输入。不管怎样,pandas有强大的方法来执行矢量化计算,如果你能展示你想要做的事情,那么就可以提出一个解决方案。它会给你你想要的输出。我想用我系统的所有核心在多处理中运行相同的代码。我的真实数据帧非常大,它需要大量的计算时间,因此我想改进与串行代码相同的计算。
import numpy as np
import pandas as pd   

def do_something (df):
    return df

def main(df,df_hide,df_res):
    for i in range(0,df_hide.shape[0]):
    
        df = df.append(df_hide.iloc[i,:])
        df_res.iloc[i,0] = df.iloc[-1,0] 
    
return df_res
    
if __name__ == '__main__':   
    df = pd.DataFrame({'a':[1,2,3]})
    df_hide = pd.DataFrame({'a':[4,5,6]})
    df_res = pd.DataFrame({'z':[0,0,0]})

    df_res1 = main(df,df_hide,df_res)
    print(df_res1)