Python 为什么多处理正在运行,CPU使用率下降到0%,但结果从未公布?

Python 为什么多处理正在运行,CPU使用率下降到0%,但结果从未公布?,python,multiprocessing,freeze,Python,Multiprocessing,Freeze,我把我认为是一些简单的脚本放在一起,计算矩阵中每个特征的莫兰指数(信息增益矩阵),以及相应的权重矩阵(权重矩阵)。我想使用pool.map查看信息矩阵中的每个功能。输出只是信息矩阵中每个特征的莫兰指数向量。见代码: import multiprocessing from functools import partial def Feature_Moran_Index(Information_Gains_Matrix,Wij,N): Feature = Information_Gain

我把我认为是一些简单的脚本放在一起,计算矩阵中每个特征的莫兰指数(信息增益矩阵),以及相应的权重矩阵(权重矩阵)。我想使用pool.map查看信息矩阵中的每个功能。输出只是信息矩阵中每个特征的莫兰指数向量。见代码:

import multiprocessing
from functools import partial 

def Feature_Moran_Index(Information_Gains_Matrix,Wij,N):
    Feature = Information_Gains_Matrix    
    X_bar = np.mean(Feature)
    if X_bar != 0:
        Deviance = Feature - X_bar
        Outer_Deviance = np.outer(Deviance,Deviance)
        Deviance2 = Deviance * Deviance
        Denom = np.sum(Deviance2)
        Moran_Index_Score = (N/Wij) * (np.sum((Weights_Matrix * Outer_Deviance))/Denom)
    else:
        Moran_Index_Score = 0
    return Moran_Index_Score

def Parallel_Feature_Moran_Index(Information_Gains_Matrix,Use_Cores):
    N = Information_Gains_Matrix.shape[0]
    Wij = np.sum(Weights_Matrix)  
    pool = multiprocessing.Pool(processes = Use_Cores)
    Result = pool.map(partial(Feature_Moran_Index, Wij=Wij,N=N), Information_Gains_Matrix)
    pool.close()
    pool.join()
    Moran_Index_Scores = np.asarray(Result)
    np.save("Moran_Index_Scores.npy",Moran_Index_Scores)
    return Result

if __name__ == '__main__':
    Moran_Index_Scores = Parallel_Feature_Moran_Index(Information_Gains_Matrix,Use_Cores=(multiprocessing.cpu_count()-2))

我公开承认,我对Python中的多处理的理解并不理想,但我在过去成功地使用了很多。所以我真的不明白为什么这个简单的脚本不能工作。非常感谢你的帮助。注意,我知道脚本中没有权重矩阵。它作为一个全局文件加载,因此不必序列化到每个核心,因为它非常大。如果这激怒了任何人,我很抱歉,我知道有些人对globals的使用非常恼火


编辑:我已经在我本地的Ubuntu shell(Windows笔记本电脑)上的较小数据集上成功地使用了这段代码。这个问题发生在Ubuntu虚拟机中的一个非常大的数据集上。

当您使用
多处理时,每个进程都在自己的内存空间中运行,因此没有共享全局文件-因此将某个文件作为全局文件加载将不起作用。我95%肯定它能起作用,因为我在本地Ubuntu shell的较小数据集上使用了这段代码。这个问题发生在Ubuntu虚拟机中的一个非常大的数据集上。我将把这些信息添加到问题中。我的理解是,全局性是由工人继承的?我所能说的是,我对事物如何工作的理解,这已通过使用该模块的实践经验得到证实。事实上,克服这一限制的开销往往会抵消任何潜在的性能提升。好吧,我们当时处于相同的位置,但我发现了相反的结果。。。不管怎样,这似乎并没有解决我的实际问题。谢谢你抽出时间。