import IPython.parallel as ipp
rc = ipp.Client()
dv = rc[:]
dv
<DirectView [0, 1, 2, 3]>
dv.scatter('rank', rc.ids, flatten=True)
<AsyncResult: scatter>
import sys
from textwrap import indent
def foo():
"""A function that prints stuff and fails sometimes"""
for i in range(rank+1):
print("%.2f" % (1. / (2 - i)))
ar = dv.apply_async(foo)
try:
result = ar.get()
except ipp.RemoteError as e:
# display outputs, then let it raise
for eid, stdout, stderr in zip(ar.engine_id, ar.stdout, ar.stderr):
if stdout:
print('[stdout:%2i]\n%s' % (eid, indent(stdout, ' ' * 2)))
if stderr:
print('[stderr:%2i]\n%s' % (eid, indent(stderr, ' ' * 2)), file=sys.stderr)
raise
else:
print("ok: %s" % result)
ar.display_outputs()
[stdout: 0] 0.50 [stdout: 1] 0.50 1.00 [stdout: 2] 0.50 1.00 [stdout: 3] 0.50 1.00
[2:apply]: ---------------------------------------------------------------------------ZeroDivisionError Traceback (most recent call last)<string> in <module>() <ipython-input-29-67b336a6f681> in foo() ZeroDivisionError: float division by zero [3:apply]: ---------------------------------------------------------------------------ZeroDivisionError Traceback (most recent call last)<string> in <module>() <ipython-input-29-67b336a6f681> in foo() ZeroDivisionError: float division by zero