Python 为每个没有“的工人提供永久性物品池;全球”;关键词
我正在使用一个池来受益于多核。池中的每个辅助对象都需要自己的计算器对象。计算器的初始化非常耗时,所以我希望池中每个工作人员只生成一次计算器,而不是每次新任务到达时都生成。唯一的办法,就是使用“丑陋”关键字Python 为每个没有“的工人提供永久性物品池;全球”;关键词,python,multiprocessing,Python,Multiprocessing,我正在使用一个池来受益于多核。池中的每个辅助对象都需要自己的计算器对象。计算器的初始化非常耗时,所以我希望池中每个工作人员只生成一次计算器,而不是每次新任务到达时都生成。唯一的办法,就是使用“丑陋”关键字global。有没有“更干净”的方法来实现这一点 我希望避免队列(父线程通常是sigkill'd,在使用队列时离开子进程)和管理器(性能太慢) 我看不到实现您想要的方法(每个工作人员只初始化一次) 但是,如果您想为整个工作组恰好初始化一次“Calculator”,那么下面的方法似乎是可行的 de
global
。有没有“更干净”的方法来实现这一点
我希望避免队列(父线程通常是sigkill'd,在使用队列时离开子进程)和管理器(性能太慢)
我看不到实现您想要的方法(每个工作人员只初始化一次) 但是,如果您想为整个工作组恰好初始化一次“Calculator”,那么下面的方法似乎是可行的
def run_pool(args):
calculator,arg = args
return calculator.calculate(arg) # time consuming calculation
class Organiser():
def __init__(self):
self.calculator = Calculator()
self.__pool = multiprocessing.Pool(processes=4)
def process(self, tasks):
results = self.__pool.map(run_pool, [(self.calculator,data) for data in tasks])
return results
要对每个工作人员进行一次初始化,我觉得您必须使用全局变量或单例(等效)。我还将等待您的问题的其他答案:)
问候,,
悉达思
def run_pool(args):
calculator,arg = args
return calculator.calculate(arg) # time consuming calculation
class Organiser():
def __init__(self):
self.calculator = Calculator()
self.__pool = multiprocessing.Pool(processes=4)
def process(self, tasks):
results = self.__pool.map(run_pool, [(self.calculator,data) for data in tasks])
return results