CPU的Python多处理上下文切换';s

CPU的Python多处理上下文切换';s,python,python-multiprocessing,Python,Python Multiprocessing,我创建了以下简单代码,用于检查从全局字典对象进行的多处理读取: import numpy as np import multiprocessing as mp import psutil from itertools import repeat def computations_x( max_int ): #random selection mask_1 = np.random.randint( low=0, high=max_int, size=10

我创建了以下简单代码,用于检查从全局字典对象进行的多处理读取:

import numpy as np
import multiprocessing as mp
import psutil

from itertools import repeat

def computations_x( max_int ):
    
    #random selection
    
    mask_1   = np.random.randint( low=0, high=max_int, size=1000  )
    mask_2   = np.random.randint( low=0, high=max_int, size=1000  )
    
    exponent_1 = np.sqrt( np.pi )
    vector_1   = np.array( [ read_obj[ k ]**( exponent_1 ) for k in mask_1  ]  )
    vector_2   = np.array( [ read_obj[ k ]**np.pi for k in mask_2  ]  )
    
    result = []
    
    for j in range(100):
        res_col = []
        for i in range(100):
            
            c = np.multiply( vector_1, vector_2 ).sum( axis=0 )
            res_col.append(c)
        
        res_col = np.array( res_col )
        
        result.append( res_col )
        
    result = np.array( result )
    
    return result
            

global read_obj

total_items = 40000
max_int     = 1000
keys        = np.arange(0, max_int)

number_processors      = psutil.cpu_count( logical=False )
#number_used_processors = 1
number_used_processors = number_processors - 1
     
number_tasks           = number_used_processors        

read_obj = { k: np.random.rand( 1000 ) for k in keys   }

pool        = mp.Pool( processes = number_used_processors )

args        = list( repeat( max_int, number_tasks ) ) 
results     = pool.map( computations_x, args )
                
pool.close()  
pool.join()
然而,当观察CPU性能时,我发现在执行计算时,操作系统正在切换CPU。我在Ubuntu 18.04上运行,这在使用Python的MP模块时是正常行为吗?以下是调试代码时在系统监视器中观察到的内容(我使用Eclipse2019进行调试)


感谢您的帮助,因为在我的主要项目中,我需要以与此处相同的精神通过流程共享一个全局“只读”对象,我希望确保这不会严重影响性能;我还希望确保在Pool类中并发执行所有任务。谢谢。

我想说这是正常的行为,因为操作系统必须确保其他进程不会因CPU时间而耗尽

下面是一篇关于操作系统调度器基础知识的精彩文章:


它的重点是Golang,但第一部分相当笼统。

我认为这是操作系统的正常行为,因为操作系统必须确保其他进程不会因CPU时间而耗尽

下面是一篇关于操作系统调度器基础知识的精彩文章:

它的重点是Golang,但第一部分相当笼统