##// END OF EJS Templates
test WinHPC launchers on all platforms...
test WinHPC launchers on all platforms the tests don't actually launch anything, they just write template files, so they can run on any platform.

File last commit:

r9190:20a102a5
r12903:1e3f6739
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))