我正在使用一个池来充分利用多个核心。池中的每个工作进程都需要自己的计算器对象。计算器的初始化非常耗时,因此我希望每个工作进程只生成一次计算器对象,而不是每次有新任务到达就生成。我得到这个工作的唯一方法是使用“丑陋”的关键字
global 。是否有更“清洁”的方法来实现这个?
我希望避免使用队列(父线程经常被sigkill并留下子进程),以及管理器(性能太慢)。
#!/usr/bin/python
# -*- coding: utf-8 -*-
import multiprocessing
def init_pool():
global calculator
calculator = Calculator() # should only executed ones per worker
def run_pool(args):
return calculator.calculate(*args) # time consuming calculation
class Organiser():
def __init__(self):
self.__pool = multiprocessing.Pool(initializer=init_pool)
def process(self, tasks):
results = self.__pool.map(run_pool, tasks)
return results