-
Notifications
You must be signed in to change notification settings - Fork 3
/
pb.py
71 lines (52 loc) · 1.64 KB
/
pb.py
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
60
61
62
63
64
65
66
67
68
69
70
71
"""
Benchmark for Twisted Spread.
"""
from twisted.python.compat import _PY3
from twisted.spread.pb import PBClientFactory, PBServerFactory, Root
from benchlib import Client, driver
class BenchRoot(Root):
def remote_discard(self, argument):
pass
class Client(Client):
self._structure = [
b'hello' * 100,
{
b'bytestring key': b'val',
'nativestr': 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 cleanup(self):
self._reference.broker.transport.loseConnection()
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)
def cleanup(passthrough):
d = port.stopListening()
d.addCallback(lambda ignored: passthrough)
return d
d.addCallback(cleanup)
return d
if __name__ == '__main__':
import sys
import pb
driver(pb.main, sys.argv)