"""Measure latency of reactor thread APIs. run with runtests."""
from pyunit import unittest
import time
from twisted.internet import reactor, threads
class LatencyTestCase(unittest.TestCase):
numRounds = 5
def setUp(self):
self.from_times = []
self.in_times = []
def tearDown(self):
threads.shutdown()
def wait(self):
start = time.time()
while time.time() - start < 1:
reactor.iterate(1.0)
def printResult(self):
print
print
print "callFromThread latency:"
sum = 0
for t in self.from_times: sum += t
print "%f millisecond" % ((sum / self.numRounds) * 1000)
print "callInThread latency:"
sum = 0
for t in self.in_times: sum += t
print "%f millisecond" % ((sum / self.numRounds) * 1000)
print
print
def testCallFromThread(self):
for i in range(self.numRounds):
reactor.callInThread(self.tcmf_2, time.time())
self.wait()
assert len(self.in_times) == len(self.from_times)
assert len(self.in_times) == self.numRounds
self.printResult()
def tcmf_2(self, start):
# runs in thread
self.in_times.append(time.time() - start)
reactor.callFromThread(self.tcmf_3, time.time())
def tcmf_3(self, start):
self.from_times.append(time.time() - start)
syntax highlighted by Code2HTML, v. 0.9.1