##// END OF EJS Templates
tasks on engines when they die fail instead of hang...
tasks on engines when they die fail instead of hang This is only true in the Python scheduler, and not for any ZMQ scheduler (MUX,control,pure)

File last commit:

r3609:8d078bcc
r3612:4094d44b
Show More
throughput.py
85 lines | 2.1 KiB | text/x-python | PythonLexer
import time
import numpy as np
from IPython.zmq.parallel import client as clientmod
nlist = map(int, np.logspace(2,9,16,base=2))
nlist2 = map(int, np.logspace(2,8,15,base=2))
tlist = map(int, np.logspace(7,22,16,base=2))
nt = 16
def wait(t=0):
import time
time.sleep(t)
def echo(s=''):
return s
def time_throughput(nmessages, t=0, f=wait):
client = clientmod.Client()
view = client[None]
# do one ping before starting timing
if f is echo:
t = np.random.random(t/8)
view.apply_sync(echo, '')
client.spin()
tic = time.time()
for i in xrange(nmessages):
view.apply(f, t)
lap = time.time()
client.barrier()
toc = time.time()
return lap-tic, toc-tic
def time_twisted(nmessages, t=0, f=wait):
from IPython.kernel import client as kc
client = kc.TaskClient()
if f is wait:
s = "import time; time.sleep(%f)"%t
task = kc.StringTask(s)
elif f is echo:
t = np.random.random(t/8)
s = "s=t"
task = kc.StringTask(s, push=dict(t=t), pull=['s'])
else:
raise
# do one ping before starting timing
client.barrier(client.run(task))
tic = time.time()
tids = []
for i in xrange(nmessages):
tids.append(client.run(task))
lap = time.time()
client.barrier(tids)
toc = time.time()
return lap-tic, toc-tic
def do_runs(nlist,t=0,f=wait, trials=2, runner=time_throughput):
A = np.zeros((len(nlist),2))
for i,n in enumerate(nlist):
t1 = t2 = 0
for _ in range(trials):
time.sleep(.25)
ts = runner(n,t,f)
t1 += ts[0]
t2 += ts[1]
t1 /= trials
t2 /= trials
A[i] = (t1,t2)
A[i] = n/A[i]
print n,A[i]
return A
def do_echo(n,tlist=[0],f=echo, trials=2, runner=time_throughput):
A = np.zeros((len(tlist),2))
for i,t in enumerate(tlist):
t1 = t2 = 0
for _ in range(trials):
time.sleep(.25)
ts = runner(n,t,f)
t1 += ts[0]
t2 += ts[1]
t1 /= trials
t2 /= trials
A[i] = (t1,t2)
A[i] = n/A[i]
print t,A[i]
return A