Я экспериментирую с IPython.parallel
и просто хочу запустить несколько команд оболочки на разных машинах.IPython.параллельно не использовать многоядерные?
У меня есть следующий ноутбук:
Cell 0:
from IPython.parallel import Client
client = Client()
print len(client)
5
И запуск команды:
Cell 1:
%%px --targets 0 --noblock
!python server.py
Cell 2:
%%px --targets 1 --noblock
!python mincemeat.py 127.0.0.1
Cell 3:
%%px --targets 2 --noblock
!python mincemeat.py 127.0.0.1
Что она делает это использует mincemeat
реализации MapReduce. Когда я запускаю первый !python mincemeat.py 127.0.0.1
, он использует примерно 100% одного ядра, а затем, когда я запускаю второй, он падает до 50%. У меня есть 4 ядра (+ виртуальные ядра) на машине и их можно использовать при запуске непосредственно с терминала, но не в ноутбуке.
Есть что-то, что мне не хватает? Я хотел бы использовать одно ядро для команды !python mincemeat.py 127.0.0.1
.
EDIT:
Для ясности, вот еще одна вещь, которая не использует несколько ядер:
Cell 1:
%%px --targets 0 --noblock
a = 0
for i in xrange(100000):
for j in xrange(10000):
a += 1
Cell 2:
%%px --targets 0 --noblock
a = 0
for i in xrange(100000):
for j in xrange(10000):
a += 1
Полагаю, что я что-то упускаю. Я считаю, что эти две ячейки должны запускать один другой сердечник, если он доступен. Однако, похоже, это не так. Опять же, использование ЦП показывает, что они используют одно и то же ядро и используют 50% его. Что я сделал не так?
Я не уверен, что смысл использования IPython.Параллельно здесь, когда вы только запускаете однострочные команды оболочки на одной машине за раз, но маловероятно, что IPython.parallel может помешать тому, сколько ядер использует ваши подпроцессы. Как это выглядит, если вы делаете такой же пример без IPython.parallel (так как это всего лишь три однострочных вызова оболочки)? – minrk
Привет @mnirk. Без Ipython.parallel ячейки блокируют, это намного менее интересно. Чтобы прояснить ситуацию, я не хочу запускать один процесс на разных ядрах, мне бы хотелось, чтобы каждый процесс получил одно ядро. Вот почему я назначаю каждую команду другой цели. Однако кажется, что все двигатели (цель от 0 до 4) работают на одном ядре. – zermelozf
Я имею в виду сделать это в трех сеансах терминала - это все, что вы делаете прямо сейчас, запустив одну команду оболочки в трех отдельных сеансах. IPython вообще не задействован. – minrk