Python Multiprocessing Pool.map()问题

时间:2015-06-04 08:55:36

标签: python python-2.7 numpy multiprocessing

我有一个代码,它在循环中执行许多独立任务,我想将其转换为多处理以加快速度。我已经设法以这种方式加速代码中其他地方的另一个循环任务,这个看起来非常相似。但是,它没有给出以下错误:

    File "Z:\Blade Test KTP\BladeTestOptimisationSoftware\python\source\SteadyStateMP.py", line 2196, in <module>
    x0,FitnessTracker=GAMainFunc(GAPopulation,GAGeneration,Crossover,Mutation,FitnessScaling,SwapVariables,Bounds,Args+(False,))
    File "Z:\Blade Test KTP\BladeTestOptimisationSoftware\python\source\SteadyStateMP.py", line 1480, in GAMainFunc
    result = pool.map(func,PopulationList)
    File "C:\Python27\lib\multiprocessing\pool.py", line 251, in map
    return self.map_async(func, iterable, chunksize).get()
    File "C:\Python27\lib\multiprocessing\pool.py", line 558, in get
    raise self._value
    NameError: global name 'NodesList' is not defined

不幸的是,一个可运行的例子是不可行的,因为代码量,输入文件的大小以及我将其置于公共领域时遇到麻烦的事实......我没有管理要么在较小的范围内复制问题(如上所述,我在其他地方成功实现了多处理,并且我使代码非常相似)。我的代码结构如下所示:

    from functools import partial
    import multiprocessing as mp

    def OptimFunc(x0,SectionProps,SectionToAnalyse,Nodes,ElNormTarget,OptimInput,
              K,Kl,M,Rlb,Damping,Cdb,TestType,TestStandPitch,BladePitch,gravity,FullReturn):
        #Do some stuff and return a scalar value. NodesList can be printed 

    def SwapVariables(Consts,string):
        x0=StringToArray(string)
        return OptimFunc(x0,*Consts[0])

    PopulationList=[list,containing,different,trial,solutions,for,optimisation,function]
    Consts=(SectionProps,SectionToAnalyse,Nodes,ElNormTarget,OptimInput,
                  K,Kl,M,Rlb,Damping,Cdb,TestType,TestStandPitch,BladePitch,gravity)

    func=partial(SwapVariables,[Consts])
    NoCPUs=mp.cpu_count()
    pool=mp.Pool(processes=NoCPUs) 
    result = pool.map(func,PopulationList)
    Error=np.array(result)
    pool.close()

这种非并行实现工作正常(字面意思是用itertools.map()或循环替换pool.map())。这和我的成功实现之间的唯一区别是NodesList是一个numpy数组,所以我尝试将数组放在一个字典和一个列表中(这是我成功的并行循环中使用的函数所使用的变量类型)具有相同的错误。我避免像瘟疫这样的全局变量,所以我被侮辱python会建议我使用它们!最奇怪的部分是我可以在愤怒中使用之前在OptimFunc中打印NodesList。对此的任何帮助将不胜感激!

0 个答案:

没有答案