Parallel Magics.ipynb
227 lines
| 4.9 KiB
| text/plain
|
TextLexer
|
r7053 | { | |
"metadata": { | |||
"name": "Parallel Magics" | |||
}, | |||
"nbformat": 3, | |||
"worksheets": [ | |||
{ | |||
"cells": [ | |||
{ | |||
"cell_type": "heading", | |||
"level": 1, | |||
"source": [ | |||
"Using Parallel Magics" | |||
] | |||
}, | |||
{ | |||
"cell_type": "markdown", | |||
"source": [ | |||
"IPython has a few magics for working with your engines.", | |||
"", | |||
"This assumes you have started an IPython cluster, either with the notebook interface,", | |||
"or the `ipcluster/controller/engine` commands." | |||
] | |||
}, | |||
{ | |||
"cell_type": "code", | |||
"collapsed": false, | |||
"input": [ | |||
"from IPython import parallel", | |||
"rc = parallel.Client()", | |||
"dv = rc[:]", | |||
"dv.block = True", | |||
"dv" | |||
], | |||
"language": "python", | |||
"outputs": [] | |||
}, | |||
{ | |||
"cell_type": "markdown", | |||
"source": [ | |||
"The parallel magics come from the `parallelmagics` IPython extension.", | |||
"The magics are set to work with a particular View object,", | |||
"so to activate them, you call the `activate()` method on a particular view:" | |||
] | |||
}, | |||
{ | |||
"cell_type": "code", | |||
"collapsed": true, | |||
"input": [ | |||
"dv.activate()" | |||
], | |||
"language": "python", | |||
"outputs": [] | |||
}, | |||
{ | |||
"cell_type": "markdown", | |||
"source": [ | |||
"Now we can execute code remotely with `%px`:" | |||
] | |||
}, | |||
{ | |||
"cell_type": "code", | |||
"collapsed": false, | |||
"input": [ | |||
"%px a=5" | |||
], | |||
"language": "python", | |||
"outputs": [] | |||
}, | |||
{ | |||
"cell_type": "code", | |||
"collapsed": false, | |||
"input": [ | |||
"%px print a" | |||
], | |||
"language": "python", | |||
"outputs": [] | |||
}, | |||
{ | |||
"cell_type": "code", | |||
"collapsed": false, | |||
"input": [ | |||
"%px a" | |||
], | |||
"language": "python", | |||
"outputs": [] | |||
}, | |||
{ | |||
"cell_type": "markdown", | |||
"source": [ | |||
"You don't have to wait for results:" | |||
] | |||
}, | |||
{ | |||
"cell_type": "code", | |||
"collapsed": true, | |||
"input": [ | |||
"dv.block = False" | |||
], | |||
"language": "python", | |||
"outputs": [] | |||
}, | |||
{ | |||
"cell_type": "code", | |||
"collapsed": false, | |||
"input": [ | |||
"%px import time", | |||
"%px time.sleep(5)", | |||
"%px time.time()" | |||
], | |||
"language": "python", | |||
"outputs": [] | |||
}, | |||
{ | |||
"cell_type": "markdown", | |||
"source": [ | |||
"But you will notice that this didn't output the result of the last command.", | |||
"For this, we have `%result`, which displays the output of the latest request:" | |||
] | |||
}, | |||
{ | |||
"cell_type": "code", | |||
"collapsed": false, | |||
"input": [ | |||
"%result" | |||
], | |||
"language": "python", | |||
"outputs": [] | |||
}, | |||
{ | |||
"cell_type": "markdown", | |||
"source": [ | |||
"Remember, an IPython engine is IPython, so you can do magics remotely as well!" | |||
] | |||
}, | |||
{ | |||
"cell_type": "code", | |||
"collapsed": false, | |||
"input": [ | |||
"dv.block = True", | |||
"%px %pylab inline" | |||
], | |||
"language": "python", | |||
"outputs": [] | |||
}, | |||
{ | |||
"cell_type": "markdown", | |||
"source": [ | |||
"`%%px` can also be used as a cell magic, for submitting whole blocks.", | |||
"This one acceps `--block` and `--noblock` flags to specify", | |||
"the blocking behavior, though the default is unchanged.", | |||
"" | |||
] | |||
}, | |||
{ | |||
"cell_type": "code", | |||
"collapsed": true, | |||
"input": [ | |||
"dv.scatter('id', dv.targets, flatten=True)", | |||
"dv['stride'] = len(dv)" | |||
], | |||
"language": "python", | |||
"outputs": [] | |||
}, | |||
{ | |||
"cell_type": "code", | |||
"collapsed": false, | |||
"input": [ | |||
"%%px --noblock", | |||
"x = linspace(0,pi,1000)", | |||
"for n in range(id,12, stride):", | |||
" print n", | |||
" plt.plot(x,sin(n*x))", | |||
"plt.title(\"Plot %i\" % id)" | |||
], | |||
"language": "python", | |||
"outputs": [] | |||
}, | |||
{ | |||
"cell_type": "code", | |||
"collapsed": false, | |||
"input": [ | |||
"%result" | |||
], | |||
"language": "python", | |||
"outputs": [] | |||
}, | |||
{ | |||
"cell_type": "markdown", | |||
"source": [ | |||
"It also lets you choose some amount of the grouping of the outputs with `--group-outputs`:", | |||
"", | |||
"The choices are:", | |||
"", | |||
"* `engine` - all of an engine's output is collected together", | |||
"* `type` - where stdout of each engine is grouped, etc. (the default)", | |||
"* `order` - same as `type`, but individual displaypub outputs are interleaved.", | |||
" That is, it will output the first plot from each engine, then the second from each,", | |||
" etc." | |||
] | |||
}, | |||
{ | |||
"cell_type": "code", | |||
"collapsed": false, | |||
"input": [ | |||
"%%px --group-outputs=engine", | |||
"x = linspace(0,pi,1000)", | |||
"for n in range(id,12, stride):", | |||
" print n", | |||
" plt.plot(x,sin(n*x))", | |||
"plt.title(\"Plot %i\" % id)" | |||
], | |||
"language": "python", | |||
"outputs": [] | |||
}, | |||
{ | |||
"cell_type": "code", | |||
"collapsed": true, | |||
"input": [ | |||
"" | |||
], | |||
"language": "python", | |||
"outputs": [] | |||
} | |||
] | |||
} | |||
] | |||
} |