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