You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
"""
|
|
|
|
Measure latency of IPC between two local threads.
|
|
|
|
"""
|
|
|
|
|
|
|
|
import threading
|
|
|
|
|
|
|
|
import mitogen.core
|
|
|
|
import mitogen.utils
|
|
|
|
import ansible_mitogen.affinity
|
|
|
|
|
|
|
|
mitogen.utils.setup_gil()
|
|
|
|
ansible_mitogen.affinity.policy.assign_worker()
|
|
|
|
|
|
|
|
X = 20000
|
|
|
|
|
|
|
|
def flip_flop(ready, inp, out):
|
|
|
|
ready.put(None)
|
|
|
|
for x in xrange(X):
|
|
|
|
inp.get()
|
|
|
|
out.put(None)
|
|
|
|
|
|
|
|
|
|
|
|
ready = mitogen.core.Latch()
|
|
|
|
l1 = mitogen.core.Latch()
|
|
|
|
l2 = mitogen.core.Latch()
|
|
|
|
|
|
|
|
t1 = threading.Thread(target=flip_flop, args=(ready, l1, l2))
|
|
|
|
t2 = threading.Thread(target=flip_flop, args=(ready, l2, l1))
|
|
|
|
t1.start()
|
|
|
|
t2.start()
|
|
|
|
|
|
|
|
ready.get()
|
|
|
|
ready.get()
|
|
|
|
|
|
|
|
t0 = mitogen.core.now()
|
|
|
|
l1.put(None)
|
|
|
|
t1.join()
|
|
|
|
t2.join()
|
|
|
|
print('++', int(1e6 * ((mitogen.core.now() - t0) / (1.0+X))), 'usec')
|