You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python多进程指定10核却仅占用2核的问题咨询

Python多进程指定10核却仅占用2核的问题咨询

大家好,我刚接触多进程,可能这个问题有点入门级,但实在搞不清楚原因,想请教各位大佬:

我当前的环境是Ubuntu 20.04.6 LTS(64位),处理器是12代Intel(R) Core(TM) i7-12700K,内存16GB,用的Python版本是3.9.19。

最开始我运行下面这段代码时,用htop命令查看,能看到10个核都被正常利用了:

import time

def fun(ele):
    ele ** 1000

if __name__ == '__main__':
    import multiprocessing

    input_list = [1000] * 10000000
    start_time = time.time()
    
    pool = multiprocessing.Pool(10)
    result = pool.map(func=fun, iterable=input_list)
    pool.close()
    pool.join()
    
    end_time = time.time()
    print(end_time - start_time)

但是当我导入一些额外的库(比如PIL、numpy这些)之后,奇怪的现象出现了:虽然确实创建了11个进程(1个主进程+10个子进程),但看起来只有2个核在工作。修改后的代码如下:

import time
from PIL import Image
import numpy as np
import pickle
import os
import torch

def fun(ele):
    ele ** 1000

if __name__ == '__main__':
    import multiprocessing

    input_list = [1000] * 10000000
    start_time = time.time()
    
    pool = multiprocessing.Pool(10)
    result = pool.map(func=fun, iterable=input_list)
    pool.close()
    pool.join()
    
    end_time = time.time()
    print(end_time - start_time)

我用命令ps aux | grep [p]ython | grep $name_of_program$ | wc -l确认过,确实是有11个进程在运行,但这些进程好像没有被分配到所有CPU核上。

不过后来我把多进程的启动方法设置为spawn(用multiprocessing.set_start_method('spawn'))之后,10个核又能正常被全部利用了,代码如下:

import time 
from PIL import Image
import numpy as np
import pickle
import os
import torch

def fun(ele): 
    ele**1000 

if __name__ == '__main__':
    import multiprocessing 
    multiprocessing.set_start_method('spawn')
    input_list = [1000]*10000000
    start_time = time.time() 
    pool = multiprocessing.Pool(10) 
    result = pool.map(func=fun, iterable=input_list) 
    pool.close()
    pool.join()
    end_time = time.time() 
    print(end_time-start_time)

现在我有几个疑问想请教大家:

  • 为什么第二种情况里只有2个核被利用?
  • 这个问题会不会和我导入额外库导致的内存限制有关?
  • 如果用fork启动方法的话,我该怎么做才能让进程均匀分配到所有CPU核上?

备注:内容来源于stack exchange,提问作者user17349469

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 16:35:26