##// END OF EJS Templates
Merge pull request #2179 from dopplershift/pylab-switch...
Merge pull request #2179 from dopplershift/pylab-switch Enable switching %pylab mode between inline and a single gui mode in a single notebook. With this merge, `%pylab` can be called interactively to toggle inline/GUI (matplotlib floating windows) mode. After initializing `%pylab inline`, now one can call `%pylab` without arguments to activate the default GUI or ask for a specific one as usual. IPython will detect if a different GUI is requested if one was already activated and will refuse to do so (to prevent multiple event loops from running concurrently, which often leads to problems).

File last commit:

r7739:dff285da
r8027:6dac6929 merge
Show More
Parallel Magics.ipynb
451 lines | 10.2 KiB | text/plain | TextLexer
/ docs / examples / parallel / Parallel Magics.ipynb
MinRK
add parallel magics notebook
r7053 {
"metadata": {
"name": "Parallel Magics"
},
"nbformat": 3,
MinRK
rebuild example notebooks...
r7739 "nbformat_minor": 0,
MinRK
add parallel magics notebook
r7053 "worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 1,
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
add parallel magics notebook
r7053 "source": [
"Using Parallel Magics"
]
},
{
"cell_type": "markdown",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
add parallel magics notebook
r7053 "source": [
MinRK
update Parallel Magics notebook
r7477 "IPython has a few magics for working with your engines.\n",
"\n",
"This assumes you have started an IPython cluster, either with the notebook interface,\n",
MinRK
add parallel magics notebook
r7053 "or the `ipcluster/controller/engine` commands."
]
},
{
"cell_type": "code",
MinRK
rebuild example notebooks...
r7739 "collapsed": false,
MinRK
add parallel magics notebook
r7053 "input": [
MinRK
update Parallel Magics notebook
r7477 "from IPython import parallel\n",
"rc = parallel.Client()\n",
"dv = rc[:]\n",
"rc.ids"
MinRK
add parallel magics notebook
r7053 ],
"language": "python",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
add parallel magics notebook
r7053 "outputs": []
},
{
"cell_type": "markdown",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
add parallel magics notebook
r7053 "source": [
MinRK
update Parallel Magics notebook
r7498 "Creating a Client registers the parallel magics `%px`, `%%px`, `%pxresult`, `pxconfig`, and `%autopx`. \n",
MinRK
update Parallel Magics notebook
r7477 "These magics are initially associated with a DirectView always associated with all currently registered engines."
MinRK
add parallel magics notebook
r7053 ]
},
{
"cell_type": "markdown",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
add parallel magics notebook
r7053 "source": [
"Now we can execute code remotely with `%px`:"
]
},
{
"cell_type": "code",
MinRK
rebuild example notebooks...
r7739 "collapsed": false,
MinRK
add parallel magics notebook
r7053 "input": [
"%px a=5"
],
"language": "python",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
add parallel magics notebook
r7053 "outputs": []
},
{
"cell_type": "code",
MinRK
rebuild example notebooks...
r7739 "collapsed": false,
MinRK
add parallel magics notebook
r7053 "input": [
"%px print a"
],
"language": "python",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
add parallel magics notebook
r7053 "outputs": []
},
{
"cell_type": "code",
MinRK
rebuild example notebooks...
r7739 "collapsed": false,
MinRK
add parallel magics notebook
r7053 "input": [
"%px a"
],
"language": "python",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
add parallel magics notebook
r7053 "outputs": []
},
{
MinRK
aesthetics pass on AsyncResult.display_outputs...
r7239 "cell_type": "code",
MinRK
rebuild example notebooks...
r7739 "collapsed": false,
MinRK
aesthetics pass on AsyncResult.display_outputs...
r7239 "input": [
MinRK
update Parallel Magics notebook
r7477 "with dv.sync_imports():\n",
MinRK
add missing sys import
r7250 " import sys"
],
"language": "python",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
add missing sys import
r7250 "outputs": []
},
{
"cell_type": "code",
MinRK
rebuild example notebooks...
r7739 "collapsed": false,
MinRK
add missing sys import
r7250 "input": [
MinRK
aesthetics pass on AsyncResult.display_outputs...
r7239 "%px print >> sys.stderr, \"ERROR\""
],
"language": "python",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
aesthetics pass on AsyncResult.display_outputs...
r7239 "outputs": []
},
{
MinRK
add parallel magics notebook
r7053 "cell_type": "markdown",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
add parallel magics notebook
r7053 "source": [
MinRK
update Parallel Magics notebook
r7477 "You don't have to wait for results. The `%pxconfig` magic lets you change the default blocking/targets for the `%px` magics:"
MinRK
add parallel magics notebook
r7053 ]
},
{
"cell_type": "code",
MinRK
rebuild example notebooks...
r7739 "collapsed": false,
MinRK
add parallel magics notebook
r7053 "input": [
MinRK
update Parallel Magics notebook
r7477 "%pxconfig --noblock"
MinRK
add parallel magics notebook
r7053 ],
"language": "python",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
add parallel magics notebook
r7053 "outputs": []
},
{
"cell_type": "code",
MinRK
rebuild example notebooks...
r7739 "collapsed": false,
MinRK
add parallel magics notebook
r7053 "input": [
MinRK
update Parallel Magics notebook
r7477 "%px import time\n",
"%px time.sleep(5)\n",
MinRK
add parallel magics notebook
r7053 "%px time.time()"
],
"language": "python",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
add parallel magics notebook
r7053 "outputs": []
},
{
"cell_type": "markdown",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
add parallel magics notebook
r7053 "source": [
MinRK
update Parallel Magics notebook
r7477 "But you will notice that this didn't output the result of the last command.\n",
MinRK
update Parallel Magics notebook
r7498 "For this, we have `%pxresult`, which displays the output of the latest request:"
MinRK
add parallel magics notebook
r7053 ]
},
{
"cell_type": "code",
MinRK
rebuild example notebooks...
r7739 "collapsed": false,
MinRK
add parallel magics notebook
r7053 "input": [
MinRK
update Parallel Magics notebook
r7498 "%pxresult"
MinRK
add parallel magics notebook
r7053 ],
"language": "python",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
add parallel magics notebook
r7053 "outputs": []
},
{
"cell_type": "markdown",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
add parallel magics notebook
r7053 "source": [
"Remember, an IPython engine is IPython, so you can do magics remotely as well!"
]
},
{
"cell_type": "code",
MinRK
rebuild example notebooks...
r7739 "collapsed": false,
MinRK
add parallel magics notebook
r7053 "input": [
MinRK
update Parallel Magics notebook
r7477 "%pxconfig --block\n",
MinRK
add parallel magics notebook
r7053 "%px %pylab inline"
],
"language": "python",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
add parallel magics notebook
r7053 "outputs": []
},
{
"cell_type": "markdown",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
add parallel magics notebook
r7053 "source": [
MinRK
update Parallel Magics notebook
r7477 "`%%px` can also be used as a cell magic, for submitting whole blocks.\n",
"This one acceps `--block` and `--noblock` flags to specify\n",
"the blocking behavior, though the default is unchanged.\n"
MinRK
add parallel magics notebook
r7053 ]
},
{
"cell_type": "code",
MinRK
rebuild example notebooks...
r7739 "collapsed": false,
MinRK
add parallel magics notebook
r7053 "input": [
MinRK
update Parallel Magics notebook
r7477 "dv.scatter('id', dv.targets, flatten=True)\n",
MinRK
add parallel magics notebook
r7053 "dv['stride'] = len(dv)"
],
"language": "python",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
add parallel magics notebook
r7053 "outputs": []
},
{
"cell_type": "code",
MinRK
rebuild example notebooks...
r7739 "collapsed": false,
MinRK
add parallel magics notebook
r7053 "input": [
MinRK
update Parallel Magics notebook
r7477 "%%px --noblock\n",
"x = linspace(0,pi,1000)\n",
"for n in range(id,12, stride):\n",
" print n\n",
" plt.plot(x,sin(n*x))\n",
MinRK
add parallel magics notebook
r7053 "plt.title(\"Plot %i\" % id)"
],
"language": "python",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
add parallel magics notebook
r7053 "outputs": []
},
{
"cell_type": "code",
MinRK
rebuild example notebooks...
r7739 "collapsed": false,
MinRK
add parallel magics notebook
r7053 "input": [
MinRK
update Parallel Magics notebook
r7498 "%pxresult"
MinRK
add parallel magics notebook
r7053 ],
"language": "python",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
add parallel magics notebook
r7053 "outputs": []
},
{
"cell_type": "markdown",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
add parallel magics notebook
r7053 "source": [
MinRK
update Parallel Magics notebook
r7477 "It also lets you choose some amount of the grouping of the outputs with `--group-outputs`:\n",
"\n",
"The choices are:\n",
"\n",
"* `engine` - all of an engine's output is collected together\n",
"* `type` - where stdout of each engine is grouped, etc. (the default)\n",
"* `order` - same as `type`, but individual displaypub outputs are interleaved.\n",
" That is, it will output the first plot from each engine, then the second from each,\n",
MinRK
add parallel magics notebook
r7053 " etc."
]
},
{
"cell_type": "code",
MinRK
rebuild example notebooks...
r7739 "collapsed": false,
MinRK
add parallel magics notebook
r7053 "input": [
MinRK
update Parallel Magics notebook
r7477 "%%px --group-outputs=engine\n",
"x = linspace(0,pi,1000)\n",
"for n in range(id+1,12, stride):\n",
" print n\n",
" plt.figure()\n",
" plt.plot(x,sin(n*x))\n",
" plt.title(\"Plot %i\" % n)"
MinRK
add parallel magics notebook
r7053 ],
"language": "python",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
add parallel magics notebook
r7053 "outputs": []
},
{
MinRK
aesthetics pass on AsyncResult.display_outputs...
r7239 "cell_type": "markdown",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
aesthetics pass on AsyncResult.display_outputs...
r7239 "source": [
MinRK
update Parallel Magics notebook
r7477 "When you specify 'order', then individual display outputs (e.g. plots) will be interleaved.\n",
"\n",
MinRK
update Parallel Magics notebook
r7498 "`%pxresult` takes the same output-ordering arguments as `%%px`, \n",
"so you can view the previous result in a variety of different ways with a few sequential calls to `%pxresult`:"
MinRK
aesthetics pass on AsyncResult.display_outputs...
r7239 ]
},
{
"cell_type": "code",
MinRK
rebuild example notebooks...
r7739 "collapsed": false,
MinRK
aesthetics pass on AsyncResult.display_outputs...
r7239 "input": [
MinRK
update Parallel Magics notebook
r7498 "%pxresult --group-outputs=order"
MinRK
aesthetics pass on AsyncResult.display_outputs...
r7239 ],
"language": "python",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
aesthetics pass on AsyncResult.display_outputs...
r7239 "outputs": []
},
{
"cell_type": "heading",
"level": 2,
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
aesthetics pass on AsyncResult.display_outputs...
r7239 "source": [
"Single-engine views"
]
},
{
"cell_type": "markdown",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
aesthetics pass on AsyncResult.display_outputs...
r7239 "source": [
"When a DirectView has a single target, the output is a bit simpler (no prefixes on stdout/err, etc.):"
]
},
{
"cell_type": "code",
MinRK
rebuild example notebooks...
r7739 "collapsed": false,
MinRK
aesthetics pass on AsyncResult.display_outputs...
r7239 "input": [
MinRK
update Parallel Magics notebook
r7477 "def generate_output():\n",
" \"\"\"function for testing output\n",
" \n",
" publishes two outputs of each type, and returns something\n",
" \"\"\"\n",
" \n",
" import sys,os\n",
" from IPython.core.display import display, HTML, Math\n",
" \n",
" print \"stdout\"\n",
" print >> sys.stderr, \"stderr\"\n",
" \n",
" display(HTML(\"<b>HTML</b>\"))\n",
" \n",
" print \"stdout2\"\n",
" print >> sys.stderr, \"stderr2\"\n",
" \n",
" display(Math(r\"\\alpha=\\beta\"))\n",
" \n",
" return os.getpid()\n",
"\n",
MinRK
aesthetics pass on AsyncResult.display_outputs...
r7239 "dv['generate_output'] = generate_output"
],
"language": "python",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
aesthetics pass on AsyncResult.display_outputs...
r7239 "outputs": []
},
{
MinRK
update Parallel Magics notebook
r7477 "cell_type": "markdown",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
update Parallel Magics notebook
r7477 "source": [
"You can also have more than one set of parallel magics registered at a time.\n",
"\n",
"The `View.activate()` method takes a suffix argument, which is added to `'px'`."
]
},
{
MinRK
add parallel magics notebook
r7053 "cell_type": "code",
MinRK
rebuild example notebooks...
r7739 "collapsed": false,
MinRK
add parallel magics notebook
r7053 "input": [
MinRK
update Parallel Magics notebook
r7477 "e0 = rc[-1]\n",
"e0.block = True\n",
"e0.activate('0')"
],
"language": "python",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
update Parallel Magics notebook
r7477 "outputs": []
},
{
"cell_type": "code",
MinRK
rebuild example notebooks...
r7739 "collapsed": false,
MinRK
update Parallel Magics notebook
r7477 "input": [
"%px0 generate_output()"
MinRK
aesthetics pass on AsyncResult.display_outputs...
r7239 ],
"language": "python",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
aesthetics pass on AsyncResult.display_outputs...
r7239 "outputs": []
},
{
"cell_type": "code",
MinRK
rebuild example notebooks...
r7739 "collapsed": false,
MinRK
aesthetics pass on AsyncResult.display_outputs...
r7239 "input": [
"%px generate_output()"
MinRK
add parallel magics notebook
r7053 ],
"language": "python",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
add parallel magics notebook
r7053 "outputs": []
MinRK
update Parallel Magics notebook
r7477 },
{
"cell_type": "markdown",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
update Parallel Magics notebook
r7477 "source": [
"As mentioned above, we can redisplay those same results with various grouping:"
]
},
{
"cell_type": "code",
MinRK
rebuild example notebooks...
r7739 "collapsed": false,
MinRK
update Parallel Magics notebook
r7477 "input": [
"%pxresult --group-outputs order"
],
"language": "python",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
update Parallel Magics notebook
r7477 "outputs": []
},
{
"cell_type": "code",
MinRK
rebuild example notebooks...
r7739 "collapsed": false,
MinRK
update Parallel Magics notebook
r7477 "input": [
"%pxresult --group-outputs engine"
],
"language": "python",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
update Parallel Magics notebook
r7477 "outputs": []
},
{
MinRK
update Parallel Magics notebook
r7498 "cell_type": "heading",
"level": 2,
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
update Parallel Magics notebook
r7498 "source": [
"Parallel Exceptions"
]
},
{
"cell_type": "markdown",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
update Parallel Magics notebook
r7498 "source": [
"When you raise exceptions with the parallel exception,\n",
"the CompositeError raised locally will display your remote traceback."
]
},
{
"cell_type": "code",
MinRK
rebuild example notebooks...
r7739 "collapsed": false,
MinRK
update Parallel Magics notebook
r7498 "input": [
"%%px\n",
"from numpy.random import random\n",
"A = random((100,100,'invalid shape'))"
],
"language": "python",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
update Parallel Magics notebook
r7498 "outputs": []
},
{
"cell_type": "heading",
"level": 2,
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
update Parallel Magics notebook
r7498 "source": [
"Remote Cell Magics"
]
},
{
"cell_type": "markdown",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
update Parallel Magics notebook
r7498 "source": [
"Remember, Engines are IPython too, so the cell that is run remotely by %%px can in turn use a cell magic."
]
},
{
"cell_type": "code",
MinRK
rebuild example notebooks...
r7739 "collapsed": false,
MinRK
update Parallel Magics notebook
r7498 "input": [
"%%px\n",
"%%timeit\n",
"from numpy.random import random\n",
"from numpy.linalg import norm\n",
"A = random((100,100))\n",
"norm(A, 2) "
],
"language": "python",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
update Parallel Magics notebook
r7498 "outputs": []
},
{
MinRK
update Parallel Magics notebook
r7477 "cell_type": "code",
MinRK
rebuild example notebooks...
r7739 "collapsed": false,
MinRK
update Parallel Magics notebook
r7477 "input": [],
"language": "python",
MinRK
rebuild example notebooks...
r7739 "metadata": {},
MinRK
update Parallel Magics notebook
r7477 "outputs": []
MinRK
add parallel magics notebook
r7053 }
MinRK
rebuild example notebooks...
r7739 ],
"metadata": {}
MinRK
add parallel magics notebook
r7053 }
]
}