Подтвердить что ты не робот

Вариант построения протокола для использования многоядерных процессоров

Я обнаружил, что при использовании пакетов только один ядро ​​при компиляции пакетов. Поскольку некоторые пакеты python занимают некоторое время, чтобы построить с помощью pip, я бы хотел использовать multicore на машине. При использовании Makefile я могу сделать это, как следующая команда:

make -j4

Как я могу достичь такой же цели для pip?

4b9b3361

Ответ 1

Из того, что я могу сказать, не похоже, что у пип есть эта способность, но я могу ошибаться.

Чтобы выполнить многопроцессорную обработку на python, вы используете пакет многопроцессорности, [здесь приведено руководство] (http://pymotw.com/2/multiprocessing/basics.html) о том, как сделайте это, если вы заинтересованы, и это ссылка в документы python, которые говорят об этом. Я также нашел этот вопрос полезным, Multiprocessing vs Threading Python, чтобы убедиться, что многопроцессорность сделала то, что я думал, что это так, используя преимущества нескольких процессоров.

Я прошел через исходный код pip (доступный здесь), ища ссылку на пакет многопроцессорности и не нашел никакого использования пакет. Это будет означать, что pip не использует/не поддерживает многопроцессорную обработку. Из того, что я могу сказать, файл /pip/commands/install.py является интересным для вашего вопроса, так как он вызывается при запуске pip install <package>. Для этого файла конкретно импорт

from __future__ import absolute_import

import logging
import os
import tempfile
import shutil
import warnings

from pip.req import InstallRequirement, RequirementSet, parse_requirements
from pip.locations import virtualenv_no_global, distutils_scheme
from pip.basecommand import Command
from pip.index import PackageFinder
from pip.exceptions import (
    InstallationError, CommandError, PreviousBuildDirError,
)
from pip import cmdoptions
from pip.utils.deprecation import RemovedInPip7Warning, RemovedInPip8Warning

который вы можете видеть, не имеет ссылки на пакет многопроцессорности, но я проверял все остальные файлы, чтобы убедиться.

Кроме того, я проверил описать документацию по установке и не нашел ссылки на установку с использованием нескольких ядер.

TL; DR: Pip не делает то, что вы просите. Возможно, я ошибаюсь, поскольку долго не смотрел на источник, но я уверен, что он просто не поддерживает его.

Ответ 2

Ultimate Способ решения этой проблемы

Поскольку все файлы c/cpp будут скомпилированы с помощью make commend, а make имеет параметр, который определяет, сколько cpu-ядер будет использоваться для компиляции исходного кода, мы могли бы сделать некоторые трюки на make.

  • Сохраните исходную команду make:

    sudo cp /usr/bin/make /usr/bin/make.bak

  • напишите команду "fake" make, которая добавит --jobs=6 в свой список параметров и передаст их в исходную команду make make.bak:

    make.bak --jobs=6 [email protected]

Итак, после этого даже не скомпилировать python с c libs, а также другие, содержащие c libs, ускоряются при компиляции на 6 ядер. Фактически все файлы, скомпилированные с помощью команды make, будут ускоряться.

И удачи.


Использование: - install-option = "- jobs = 6" .

pip3 install --install-option="--jobs=6" PyXXX

У меня такая же просьба, чтобы использовать pip install для ускорения компиляции. Мой целевой pkg - это PySide. Сначала я использую pip3 install pyside, мне требуется почти 30 минут (AMD 1055T 6-ядер, 10G RAM), только одно ядро ​​занимает 100% -ную нагрузку.

В pip3 --help нет подсказок, но я нашел множество опций, таких как pip install -u pyXXX, но я не знал, что такое "-u", и этот параметр также не был в pip --help. Я попробовал 'pip3 install --help' и пришел ответ: - установка-вариант.

Я прочитал код кода PySide и нашел еще один ключ: OPTION_JOBS = has_option('jobs'), я положил ipdb.set_trace() и наконец понял, как использовать multicore для компиляции с помощью pip install.

мне потребовалось около 6 минут.

-------------------------- обновление -------------------- ----------

как комментарий ниже, я, наконец, использовал трюки: cd /usr/bin sudo mv make make.bak touch make затем отредактируйте make: vim make или другим способом, который вам нравится, и введите следующее: make.bak --jobs=6 $* Я не знаком с bash, поэтому я не уверен, что это код коррекции bash. Я пишу этот комментарий в окнах. Ключ переименовать make в make.bak, а затем создать новый make, использовать этот новый make для вызова make.bak с добавлением param --jobs = 6