IPython.parallel não usa multicore?
Estou experimentandoIPython.parallel
e só quero lançar vários comandos shell em diferentes mecanismos.
Eu tenho o seguinte Notebook:
Célula 0:
from IPython.parallel import Client
client = Client()
print len(client)
5
E lance os comandos:
Célula 1:
%%px --targets 0 --noblock
!python server.py
Célula 2:
%%px --targets 1 --noblock
!python mincemeat.py 127.0.0.1
Célula 3:
%%px --targets 2 --noblock
!python mincemeat.py 127.0.0.1
O que faz é usar omincemeat
implementação do MapReduce. Quando eu lanço o primeiro!python mincemeat.py 127.0.0.1
ele usa aproximadamente 100% de um núcleo, então quando eu inicio o segundo ele cai para 50% cada. Eu tenho 4 núcleos (+ núcleos virtuais) na máquina e posso usá-los ao iniciar diretamente a partir do terminal, mas não no Notebook.
Há algo que eu esteja perdendo? Eu gostaria de usar um núcleo por!python mincemeat.py 127.0.0.1
comando.
EDITAR:
Para maior clareza, aqui está outra coisa que não está usando vários núcleos:
Célula 1:
%%px --targets 0 --noblock
a = 0
for i in xrange(100000):
for j in xrange(10000):
a += 1
Célula 2:
%%px --targets 0 --noblock
a = 0
for i in xrange(100000):
for j in xrange(10000):
a += 1
Eu suponho que estou faltando alguma coisa. Acredito que essas duas células devem ter um núcleo diferente, se disponível. No entanto, não parece ser o caso. Novamente, o uso da CPU mostra que eles compartilham o mesmo núcleo e usam 50% dele. O que eu fiz errado?