【发布时间】:2014-07-01 15:57:51
【问题描述】:
我有一个面向对象的 Python 程序,我在其中使用多处理在每个对象中执行某些数据操作。我将每个对象存储在一个通用的管理器字典中。当我想更新一个对象时,首先,我从字典中检索该对象,并在更新后将其放回原处。我的班级结构是这样的
from src.data_element import Data_element
from multiprocessing import freeze_support, Process, Manager
import pandas as pd
class Data_Obj(Data_element):
def __init__(self, dataset_name,name_wo_fields, fields):
Data_element.__init__(self, dataset_name, name_wo_fields, fields)
self.depends=['data_1','data_2']
def calc(self,obj_dict_manager):
data_1=obj_dict_manager['data_1']
data_2=obj_dict_manager['data_2']
self.df = pd.merge(
data_1.df,
data_2.df,
on='week',
suffixes=('', '_y')
)[['week','val']]
def calculate(obj_dict_manager,data):
data_obj=obj_dict_manager[data]
data_obj.calc(obj_dict_manager)
obj_dict_manager[data]=data_obj
if __name__ == '__main__':
freeze_support()
manager=Manager()
obj_dict_manager=manager.dict()
obj_dict_manager=create_empty_objects(obj_dict_manager)
joblist=[]
for data in obj_dict_manager.keys():
p=Process(target=calculate, args=(obj_dict_manager,data))
joblist.append(p)
p.start()
for job in joblist:
job.join()
在这些操作过程中,需要花费大量时间
data_1=obj_dict_manager['data_1']
data_2=obj_dict_manager['data_2']
即,在从管理器字典中检索对象期间花费 1 秒,其余的计算需要另外 1 秒。
有什么方法可以减少我在这里花费的时间吗?我将进行数千次这样的操作,性能对我来说至关重要。
【问题讨论】:
标签: python dictionary pandas multiprocessing