Как это возможно, что программа python использует несколько ядер при работе с Cpython? - PullRequest
0 голосов
/ 17 марта 2020

Вся документация гласит, что запуск программы python с использованием библиотеки threading на самом деле не позволяет запускать программу на нескольких ядрах с интерпретатором Cpython. Тем не менее, использование процессора показывает, что он использует несколько ядер. Как это возможно?

Я проверил, что интерпретатор 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")

Использование ЦП перед запуском программы (запуск 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

Использование ЦП при запуске программы

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

1 Ответ

0 голосов
/ 17 марта 2020

Я думаю, что документация означает, что использование threading не позволяет одновременно запускать несколько потоков одновременно. Это означает, что вы можете использовать только одну базовую емкость в одном процессе, даже если вы запускаете 4 или 8 потоков одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...