将多处理输出附加到Python中的数据框

时间:2020-10-08 07:16:23

标签: python python-3.x dataframe python-multiprocessing

我有两个函数,正在使用Python中的多处理程序运行。我在下面给出了一个示例(为简单起见,减少了功能代码)。我想将两个函数的输出附加到单个数据框中并存储到“ df”中。

import multiprocessing 
  
def uttar_pradesh(): 
 
 
  up=pd.DataFrame({'date':'01-09-2020','time':'00:00:00','demand':6577,'state':"Uttar Pradesh"})
  
  return up
  
  
def andhra_pradesh(): 
  

   ap=pd.DataFrame({'date':'01-09-2020','time':'00:00:00','demand':3797,'state':"Andhra Pradesh"})
  
   return ap
  

  
if __name__ == "__main__": 
   
    df = []
    p1 = multiprocessing.Process(target=uttar_pradesh )
    p2 = multiprocessing.Process(target=andhra_pradesh) 
    
    df.append(p1)
    df.append(p2)
    
    p1.start() 
    p2.start() 

    p1.join() 
    p2.join() 
    print(df)
    

1 个答案:

答案 0 :(得分:0)

multiprocessing.Process()不会给您任何结果值,它只会在其他进程中运行函数。

假设您可以将函数重写为表格

def get_state_data(state):
   return data_for_that_state

(为什么不可以)

然后可以将更高级别的Poolmap(或imapimap_unordered)一起使用:

states = ["uttar_pradesh", "andhra_pradesh"]
with multiprocessing.Pool() as p:
   for result in p.map(get_state_data,  states):
       pass  # append the result data or do whatever with it

如果您不想使用Pool和map,也可以设置multiprocessing.Queue()并传递给子流程并读取它,但这是更多的工作。