使用Cpython运行时python程序如何利用多个内核?

问题描述 投票:0回答:1

[所有文档都指出,使用threading库运行python程序并不能真正使您能够在Cpython解释器的多个内核上运行该程序。但是,CPU使用率表明它正在利用多个内核。那怎么可能?

我确实使用]验证了python解释器是Cpython>

import platform
platform.python_implementation() # output-> 'Cpython'

Python版本-3.5.2操作系统-ubuntu

线程代码

import threading
import math

def fizz():
  print ("start")
  for i in range (1, 100000000):
    math.sqrt(i)

  print(" exit")

threads = []

n = 4
for _ in range (n):
  t = threading.Thread(target=fizz)
  threads.append(t)

for t in threads:
  t.start()

for t in threads:
  t.join()

print ("Done")

运行程序之前的CPU使用率(运行top

op - 09:27:44 up 235 days, 11:41,  8 users,  load average: 0.27, 0.23, 0.13
Tasks: 530 total,   1 running, 522 sleeping,   7 stopped,   0 zombie
%Cpu0  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  0.3 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

运行程序时的CPU使用率

op - 09:29:29 up 235 days, 11:43,  8 users,  load average: 0.39, 0.24, 0.14
Tasks: 530 total,   1 running, 522 sleeping,   7 stopped,   0 zombie
%Cpu0  : 26.0 us,  0.7 sy,  0.0 ni, 73.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.3 st
%Cpu1  : 24.5 us,  1.0 sy,  0.0 ni, 74.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.3 st
%Cpu2  : 25.0 us,  0.3 sy,  0.0 ni, 74.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  : 26.1 us,  0.0 sy,  0.0 ni, 73.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    

[所有文档都指出,使用线程库运行python程序并不能真正使您能够在Cpython解释器的多个内核上运行该程序。但是,CPU使用率显示...

python python-3.x python-multiprocessing python-multithreading gil
1个回答
0
投票

[我认为文档意味着使用threading不会真正同时运行多个线程,这意味着您只能在一个进程中使用一个核心容量,即使您同时运行4或8个线程。

© www.soinside.com 2019 - 2024. All rights reserved.