~exarkun/+junk/twisted-benchmarks

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
"""
Benchmark for Twisted Spread.
"""

from twisted.spread.pb import PBServerFactory, PBClientFactory, Root

from benchlib import Client, driver


class BenchRoot(Root):
    def remote_discard(self, argument):
        pass



class Client(Client):
    _structure = [
        'hello' * 100,
        {'foo': 'bar',
         'baz': 100,
         u'these are bytes': (1, 2, 3)}]

    def __init__(self, reactor, port):
        super(Client, self).__init__(reactor)
        self._port = port


    def run(self, *args, **kwargs):
        def connected(reference):
            self._reference = reference
            return super(Client, self).run(*args, **kwargs)
        client = PBClientFactory()
        d = client.getRootObject()
        d.addCallback(connected)
        self._reactor.connectTCP('127.0.0.1', self._port, client)
        return d


    def _request(self):
        d = self._reference.callRemote('discard', self._structure)
        d.addCallback(self._continue)
        d.addErrback(self._stop)


def main(reactor, duration):
    concurrency = 15

    server = PBServerFactory(BenchRoot())
    port = reactor.listenTCP(0, server)
    client = Client(reactor, port.getHost().port)
    d = client.run(concurrency, duration)
    return d


if __name__ == '__main__':
    import sys
    import pb
    driver(pb.main, sys.argv)