Я экспериментирую с IPython.parallel
и просто хочу запустить несколько команд оболочки на разных машинах.
У меня есть следующий блокнот:
Ячейка 0:
from IPython.parallel import Client
client = Client()
print len(client)
5
И запустите команды:
Ячейка 1:
%%px --targets 0 --noblock
!python server.py
Ячейка 2:
%%px --targets 1 --noblock
!python mincemeat.py 127.0.0.1
Ячейка 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:
Для ясности здесь еще одна вещь, которая не использует несколько ядер:
Ячейка 1:
%%px --targets 0 --noblock
a = 0
for i in xrange(100000):
for j in xrange(10000):
a += 1
Ячейка 2:
%%px --targets 0 --noblock
a = 0
for i in xrange(100000):
for j in xrange(10000):
a += 1
Я полагаю, что у меня что-то не хватает. Я считаю, что эти две ячейки должны запускать один другой сердечник, если он доступен. Однако, похоже, это не так. Опять же, использование ЦП показывает, что они используют одно и то же ядро и используют 50% его. Что я сделал не так?