Python Interpreter использует только 12% мощности процессора

Где-то (не могу определить, где) переменной среды LC_ALL присваивается значение C. Вам нужно избавиться от этого назначения.

На странице https://help.ubuntu.com/community/EnvironmentVariables упоминается несколько файлов, которые обычно используются для постоянного сохранения переменных среды.

НТН

25
задан 24 August 2017 в 16:33

6 ответов

Я предполагаю, что у вас есть процессор с 8 виртуальными ядрами (возможно, четырехъядерный с гиперпотоком)? Это означает, что один полностью загруженный процессорный поток / виртуальное ядро ​​равен 12,5% общей нагрузки.

Интерпретатор Python - это приложение, которое по умолчанию работает только как один процесс и поэтому не может использовать преимущества более чем одного виртуального ядра. Даже если код, который вы запускаете с ним, использует многопоточность, он будет использовать только один процессорный поток / виртуальное ядро ​​из-за GIL (глобальный блокиратор интерпретатора).

Только если ваша программа Python использует GIL (блокировка глобального интерпретатора) , которая фактически запускает несколько экземпляров интерпретатора Python и позволяет им выполнять ваши задачи по-настоящему параллельно, вы можете принять преимущество нескольких виртуальных ядер / потоков ЦП. (Как отметил @SargeBorsch в своем комментарии, есть также некоторые продвинутые способы достижения этого без многопроцессорности, но обычно это не то, что вы быстро пишете сами.)

72
ответ дан 22 May 2018 в 19:06
  • 1
    Это на самом деле имеет большой смысл. Да, у меня четырехъядерный процессор с четырьмя ядрами (8 виртуальных ядер). Ty – Matthias Herrmann 24 August 2017 в 17:02
  • 2
    @MatthiasHerrmann Вы можете рассмотреть системный монитор, чтобы показать вам, в каком проценте каждый процессор работает. Таким образом, вы могли видеть только 1 из 8 процессоров на 100%. Вот один поток в AU по теме: эквивалент Windows «гаджеты» (для использования Wi-Fi и процессора)? – WinEunuuchs2Unix 25 August 2017 в 03:24
  • 3
    Не верно, можно использовать все ядра из одного процесса python просто отлично. Нужно просто вызвать код C и выпустить GIL. И многие существующие библиотеки выполняют именно это (например, numpy). – Sarge Borsch 25 August 2017 в 07:25
  • 4
    Или используйте Jython или IronPython, которые не имеют GIL. – OrangeDog 25 August 2017 в 16:42

Я предполагаю, что у вас есть процессор с 8 виртуальными ядрами (возможно, четырехъядерный с гиперпотоком)? Это означает, что один полностью загруженный процессорный поток / виртуальное ядро ​​равен 12,5% общей нагрузки.

Интерпретатор Python - это приложение, которое по умолчанию работает только как один процесс и поэтому не может использовать преимущества более чем одного виртуального ядра. Даже если код, который вы запускаете с ним, использует многопоточность, он будет использовать только один процессорный поток / виртуальное ядро ​​из-за GIL (глобальный блокиратор интерпретатора).

Только если ваша программа Python использует GIL (блокировка глобального интерпретатора) , которая фактически запускает несколько экземпляров интерпретатора Python и позволяет им выполнять ваши задачи по-настоящему параллельно, вы можете принять преимущество нескольких виртуальных ядер / потоков ЦП. (Как отметил @SargeBorsch в своем комментарии, есть также некоторые продвинутые способы достижения этого без многопроцессорности, но обычно это не то, что вы быстро пишете сами.)

72
ответ дан 18 July 2018 в 07:58

Я предполагаю, что у вас есть процессор с 8 виртуальными ядрами (возможно, четырехъядерный с гиперпотоком)? Это означает, что один полностью загруженный процессорный поток / виртуальное ядро ​​равен 12,5% общей нагрузки.

Интерпретатор Python - это приложение, которое по умолчанию работает только как один процесс и поэтому не может использовать преимущества более чем одного виртуального ядра. Даже если код, который вы запускаете с ним, использует многопоточность, он будет использовать только один процессорный поток / виртуальное ядро ​​из-за GIL (глобальный блокиратор интерпретатора).

Только если ваша программа Python использует GIL (блокировка глобального интерпретатора) , которая фактически запускает несколько экземпляров интерпретатора Python и позволяет им выполнять ваши задачи по-настоящему параллельно, вы можете принять преимущество нескольких виртуальных ядер / потоков ЦП. (Как отметил @SargeBorsch в своем комментарии, есть также некоторые продвинутые способы достижения этого без многопроцессорности, но обычно это не то, что вы быстро пишете сами.)

72
ответ дан 24 July 2018 в 18:57

Другая возможность, менее вероятно в этом случае, заключается в том, что программа связана с диском, то есть она считывает и записывает на / с медленного диска, а ЦПУ ждет диск.

18
ответ дан 22 May 2018 в 19:06
  • 1
    попробуйте iotop отслеживать программы, привязанные к iowait – cat 25 August 2017 в 04:26
  • 2
    Или сам код является синхронным и блокирующим. – Zydnar 26 August 2017 в 16:59

Другая возможность, менее вероятно в этом случае, заключается в том, что программа связана с диском, то есть она считывает и записывает на / с медленного диска, а ЦПУ ждет диск.

18
ответ дан 18 July 2018 в 07:58

Другая возможность, менее вероятно в этом случае, заключается в том, что программа связана с диском, то есть она считывает и записывает на / с медленного диска, а ЦПУ ждет диск.

18
ответ дан 24 July 2018 в 18:57
  • 1
    попробуйте iotop отслеживать программы, привязанные к iowait – cat 25 August 2017 в 04:26
  • 2
    Или сам код является синхронным и блокирующим. – Zydnar 26 August 2017 в 16:59

Другие вопросы по тегам:

Похожие вопросы: