Как выглядит параллельная программа Python с верхней командой?

Я работаю над общим кластером. Я видел, как люди запускают параллельный код c в этом кластере, который, когда я использую top чтобы посмотреть, какие процессы запущены, как показано, использует (например) 400% процессора, поскольку они используют четыре процессора для одного экземпляра их кода.

Теперь кто-то запускает (что я слышу) параллельный код Python. Однако вместо того, чтобы показать, что код Python использует 400% CPU, он отображается как четыре разных процесса, каждый из которых использует свой собственный процессор (на 100%).

Мне интересно, показывает ли Python (при распараллеливании) top с запуском как много разных процессов (в отличие от C), или этот код Python фактически не работает параллельно?

Я не знаю, будет ли Stack Exchange лучше для этого вопроса. Поскольку я использую top я решил, что это место будет лучше. Дайте мне знать, если я его переведу.

2 Solutions collect form web for “Как выглядит параллельная программа Python с верхней командой?”

То, что вы видите на C, использует потоки, поэтому использование процесса – это общее количество всех его потоков. Если есть 4 потока, каждый из которых использует 100% процессор, процесс будет отображаться как 400%

То, что вы видите на python, почти наверняка является параллелизмом через мультипроцессорную модель. Это модель, предназначенная для преодоления ограничений на потоки Python. Python может запускать только один поток за раз (см. Python Global Interpreter Lock – GIL). Чтобы сделать это лучше, можно использовать модуль мультипроцесса, который заканчивает создание процессов вместо потоков, которые, в свою очередь, показывают в ps как несколько процессов, которые затем могут использовать до 100% CPU каждый, так как они (каждый) резьба.

Уверен, что если вы запустите ps -afeT вы увидите потоки программы C, но никаких дополнительных потоков для программы python не увидите.

Эталонная реализация Python, CPython, имеет глобальную блокировку интерпретатора (GIL), которая предотвращает параллельное выполнение кода одновременно . Threading полезен только для ввода-вывода. Для параллельной работы вам необходимо выполнить несколько процессов. Код C, который вы просматриваете, скорее всего, использует потоки для параллелизма.

  • Гаджим, Гальк и логин
  • Обновление Python на CentOS
  • Почему apt-get в Ubuntu по-прежнему хочет установить Python 2.7?
  • Выберите каждые две строки, если они начинаются с того же имени
  • Почему coreutils сортируется медленнее, чем Python?
  • Как управлять огромным количеством файлов в оболочке?
  • Как сгенерировать HTML-отчет nmap с помощью python?
  • Скажите Python использовать альтернативную библиотеку
  • Linux - предотвращение сбоя приложения из-за нехватки дискового пространства
  • Как определить текущий коэффициент Enhanced Zoom в Compiz?
  • Как упаковать Django-сайт для Debian (не пакет Python или яйцо)?
  • Способы хранения данных для API командной строки
  • Interesting Posts

    Setuid, бит SUID, не предоставляющий права root

    Сортировать по столбцам

    распаковка tarball с жесткими ссылками на файловую систему, которая не поддерживает жесткие ссылки

    проблема с установкой mandoc

    Развертывание процессорных ядер на четырехъядерном процессоре на Linux

    используя awk для создания таблицы LaTex из моих данных в текстовом файле

    Google Compute Engine – подождите, пока служба systemd не выйдет с 0 при выключении

    Почему / как «время безотказной работы» показывает загрузку CPU> 1?

    Каковы надлежащие инструменты для настройки удаленной компиляции и работы (что-то вроде ideone)?

    Ограничение доступа только к командам CVS и Git

    Как подключиться к серверу ssh и запросить программные подсказки?

    Почему «читай» не забирает все мои вары?

    Regex awk для интерфейса Cisco

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

    что может привести к большим задержкам с запасом страниц в Linux?

    Linux и Unix - лучшая ОС в мире.