##// 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
noncopying.py
44 lines | 861 B | text/x-python | PythonLexer
"""non-copying sends"""
import zmq
import numpy
n = 10
iface = 'inproc://pub'
ctx = zmq.Context()
p = ctx.socket(zmq.PUB)
p.bind(iface)
# connect 2 subs
s1 = ctx.socket(zmq.SUB)
s1.connect(iface)
s1.setsockopt(zmq.SUBSCRIBE, '')
s2 = ctx.socket(zmq.SUB)
s2.connect(iface)
s2.setsockopt(zmq.SUBSCRIBE, '')
A = numpy.random.random((1024,1024))
# send
p.send(A, copy=False)
# recv on 1 non-copy
msg1 = s1.recv(copy=False)
B1 = numpy.frombuffer(msg1.buffer, dtype=A.dtype).reshape(A.shape)
# recv on 2 copy
msg2 = s2.recv(copy=False)
B2 = numpy.frombuffer(buffer(msg2.bytes), dtype=A.dtype).reshape(A.shape)
print (B1==B2).all()
print (B1==A).all()
A[0][0] += 10
print "~"
# after changing A in-place, B1 changes too, proving non-copying sends
print (B1==A).all()
# but B2 is fixed, since it called the msg.bytes attr, which copies
print (B1==B2).all()