htop не отображает непротиворечивую информацию

Я запускаю интенсивный в вычислительном отношении сценарий последовательного Python, и htop дает мне противоречивую информацию. Это показывает, что поток используется почти на 100%, но этот питон не использует мощность процессора. Кто-нибудь знает, почему Python не указан как использующий тонну мощности процессора? Я использую tmux для разделения экранов, чтобы вы могли видеть всю информацию.

1 ответ

Стандартный интерпретатор Python (CPython) является однопоточным. Это требуется так называемой "глобальной блокировкой интерпретатора" (GIL), которая не допускает одновременного реального доступа к объектам Python. Смотрите, например, https://wiki.python.org/moin/GlobalInterpreterLock для получения подробной информации.

Поэтому обычный скрипт Python (который не использует, например, multiprocessing библиотека для порождения нескольких процессов интерпретатора) может работать только в одном потоке процессора одновременно. Это означает, что для процессора с четырьмя потоками (двухъядерный с гиперпоточностью) он может потреблять не более 25% общего времени ЦП, суммируемого по всем потокам, или 100% одного потока ЦП.

Итак, как сообщает htop, ваш сценарий использует почти 100% одного потока ЦП, поэтому он на самом деле работает с максимальной скоростью. Здесь нет ничего необычного.

Если скрипт принадлежит вам, вы можете попробовать адаптировать или переписать его, чтобы распараллелить работу, используя multiprocessing библиотека, как упоминалось ранее. Не весь код может быть распараллелен хотя. Если вы не можете реально изменить скрипт, вам придется принять способ его запуска.

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