I got the relative magnitudes of the timeout increases reversed, so
[python.git] / Demo / sockets / throughput.py
blobb8df1f36912c5320c25b20558fcfe798172c2f4c
1 #! /usr/bin/env python
3 # Test network throughput.
5 # Usage:
6 # 1) on host_A: throughput -s [port] # start a server
7 # 2) on host_B: throughput -c count host_A [port] # start a client
9 # The server will service multiple clients until it is killed.
11 # The client performs one transfer of count*BUFSIZE bytes and
12 # measures the time it takes (roundtrip!).
15 import sys, time
16 from socket import *
18 MY_PORT = 50000 + 42
20 BUFSIZE = 1024
23 def main():
24 if len(sys.argv) < 2:
25 usage()
26 if sys.argv[1] == '-s':
27 server()
28 elif sys.argv[1] == '-c':
29 client()
30 else:
31 usage()
34 def usage():
35 sys.stdout = sys.stderr
36 print 'Usage: (on host_A) throughput -s [port]'
37 print 'and then: (on host_B) throughput -c count host_A [port]'
38 sys.exit(2)
41 def server():
42 if len(sys.argv) > 2:
43 port = eval(sys.argv[2])
44 else:
45 port = MY_PORT
46 s = socket(AF_INET, SOCK_STREAM)
47 s.bind(('', port))
48 s.listen(1)
49 print 'Server ready...'
50 while 1:
51 conn, (host, remoteport) = s.accept()
52 while 1:
53 data = conn.recv(BUFSIZE)
54 if not data:
55 break
56 del data
57 conn.send('OK\n')
58 conn.close()
59 print 'Done with', host, 'port', remoteport
62 def client():
63 if len(sys.argv) < 4:
64 usage()
65 count = int(eval(sys.argv[2]))
66 host = sys.argv[3]
67 if len(sys.argv) > 4:
68 port = eval(sys.argv[4])
69 else:
70 port = MY_PORT
71 testdata = 'x' * (BUFSIZE-1) + '\n'
72 t1 = time.time()
73 s = socket(AF_INET, SOCK_STREAM)
74 t2 = time.time()
75 s.connect((host, port))
76 t3 = time.time()
77 i = 0
78 while i < count:
79 i = i+1
80 s.send(testdata)
81 s.shutdown(1) # Send EOF
82 t4 = time.time()
83 data = s.recv(BUFSIZE)
84 t5 = time.time()
85 print data
86 print 'Raw timers:', t1, t2, t3, t4, t5
87 print 'Intervals:', t2-t1, t3-t2, t4-t3, t5-t4
88 print 'Total:', t5-t1
89 print 'Throughput:', round((BUFSIZE*count*0.001) / (t5-t1), 3),
90 print 'K/sec.'
93 main()