首页 > 解决方案 > 将多处理输出附加到 Python 中的数据框

问题描述

我有两个在 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)
    

标签: pythonpython-3.xdataframepython-multiprocessing

解决方案


只是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()传递给子进程并读取它,但它的工作量更大。


推荐阅读