diff --git a/docs/examples/parallel/Parallel Magics.ipynb b/docs/examples/parallel/Parallel Magics.ipynb new file mode 100644 index 0000000..e49cd72 --- /dev/null +++ b/docs/examples/parallel/Parallel Magics.ipynb @@ -0,0 +1,228 @@ +{ + "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": [] + } + ] + } + ] +} \ No newline at end of file