##// END OF EJS Templates
unpack out,err in ipexec...
unpack out,err in ipexec Code reflected the possibility that getoutputerror could return None, but this is no longer the case. It always returns two strings.

File last commit:

r5169:0cd2b7ac
r6221:5c32fc8c
Show More
customresults.py
61 lines | 1.8 KiB | text/x-python | PythonLexer
"""An example for handling results in a way that AsyncMapResult doesn't provide
Specifically, out-of-order results with some special handing of metadata.
This just submits a bunch of jobs, waits on the results, and prints the stdout
and results of each as they finish.
Authors
-------
* MinRK
"""
import time
import random
from IPython import parallel
# create client & views
rc = parallel.Client()
dv = rc[:]
v = rc.load_balanced_view()
# scatter 'id', so id=0,1,2 on engines 0,1,2
dv.scatter('id', rc.ids, flatten=True)
print dv['id']
def sleep_here(count, t):
"""simple function that takes args, prints a short message, sleeps for a time, and returns the same args"""
import time,sys
print "hi from engine %i" % id
sys.stdout.flush()
time.sleep(t)
return count,t
amr = v.map(sleep_here, range(100), [ random.random() for i in range(100) ], chunksize=2)
pending = set(amr.msg_ids)
while pending:
try:
rc.wait(pending, 1e-3)
except parallel.TimeoutError:
# ignore timeouterrors, since they only mean that at least one isn't done
pass
# finished is the set of msg_ids that are complete
finished = pending.difference(rc.outstanding)
# update pending to exclude those that just finished
pending = pending.difference(finished)
for msg_id in finished:
# we know these are done, so don't worry about blocking
ar = rc.get_result(msg_id)
print "job id %s finished on engine %i" % (msg_id, ar.engine_id)
print "with stdout:"
print ' ' + ar.stdout.replace('\n', '\n ').rstrip()
print "and results:"
# note that each job in a map always returns a list of length chunksize
# even if chunksize == 1
for (count,t) in ar.result:
print " item %i: slept for %.2fs" % (count, t)