annotate Demo/sockets/throughput.py @ 5817:48b94de85bf3 legacy-trunk

Extensive changes by AMK.
author Guido van Rossum <guido@python.org>
date Thu, 17 Jul 1997 16:29:42 +0000
parents 73758db2f464
children 2385ea5872e1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4573
73758db2f464 /usr/local/bin/python -> /usr/bin/env python
Guido van Rossum <guido@python.org>
parents: 1566
diff changeset
1 #! /usr/bin/env python
300
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 # Test network throughput.
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 #
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 # Usage:
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 # 1) on host_A: throughput -s [port] # start a server
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 # 2) on host_B: throughput -c count host_A [port] # start a client
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 #
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 # The server will service multiple clients until it is killed.
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 #
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 # The client performs one transfer of count*BUFSIZE bytes and
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 # measures the time it takes (roundtrip!).
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
13
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
14
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 import sys, time
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 from socket import *
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
17
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 MY_PORT = 50000 + 42
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
19
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 BUFSIZE = 1024
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
21
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
22
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 def main():
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 if len(sys.argv) < 2:
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 usage()
873
aaddf821f5d4 New == syntax
Guido van Rossum <guido@python.org>
parents: 300
diff changeset
26 if sys.argv[1] == '-s':
300
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 server()
873
aaddf821f5d4 New == syntax
Guido van Rossum <guido@python.org>
parents: 300
diff changeset
28 elif sys.argv[1] == '-c':
300
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 client()
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 else:
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 usage()
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
32
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 def usage():
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 sys.stdout = sys.stderr
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 print 'Usage: (on host_A) throughput -s [port]'
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 print 'and then: (on host_B) throughput -c count host_A [port]'
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 sys.exit(2)
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
39
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
40
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 def server():
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 if len(sys.argv) > 2:
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 port = eval(sys.argv[2])
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 else:
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 port = MY_PORT
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 s = socket(AF_INET, SOCK_STREAM)
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 s.bind('', port)
1566
9600553900d4 listen(0) -> listen(1) for Solaris 2
Guido van Rossum <guido@python.org>
parents: 1082
diff changeset
48 s.listen(1)
300
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 print 'Server ready...'
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 while 1:
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 conn, (host, remoteport) = s.accept()
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 while 1:
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 data = conn.recv(BUFSIZE)
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 if not data:
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 break
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 del data
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 conn.send('OK\n')
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 conn.close()
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 print 'Done with', host, 'port', remoteport
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
60
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
61
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 def client():
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 if len(sys.argv) < 4:
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 usage()
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 count = int(eval(sys.argv[2]))
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 host = sys.argv[3]
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 if len(sys.argv) > 4:
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 port = eval(sys.argv[4])
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
69 else:
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
70 port = MY_PORT
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
71 testdata = 'x' * (BUFSIZE-1) + '\n'
1566
9600553900d4 listen(0) -> listen(1) for Solaris 2
Guido van Rossum <guido@python.org>
parents: 1082
diff changeset
72 t1 = time.time()
300
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
73 s = socket(AF_INET, SOCK_STREAM)
1566
9600553900d4 listen(0) -> listen(1) for Solaris 2
Guido van Rossum <guido@python.org>
parents: 1082
diff changeset
74 t2 = time.time()
300
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
75 s.connect(host, port)
1566
9600553900d4 listen(0) -> listen(1) for Solaris 2
Guido van Rossum <guido@python.org>
parents: 1082
diff changeset
76 t3 = time.time()
300
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 i = 0
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
78 while i < count:
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
79 i = i+1
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
80 s.send(testdata)
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
81 s.shutdown(1) # Send EOF
1566
9600553900d4 listen(0) -> listen(1) for Solaris 2
Guido van Rossum <guido@python.org>
parents: 1082
diff changeset
82 t4 = time.time()
300
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
83 data = s.recv(BUFSIZE)
1566
9600553900d4 listen(0) -> listen(1) for Solaris 2
Guido van Rossum <guido@python.org>
parents: 1082
diff changeset
84 t5 = time.time()
300
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
85 print data
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
86 print 'Raw timers:', t1, t2, t3, t4, t5
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
87 print 'Intervals:', t2-t1, t3-t2, t4-t3, t5-t4
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
88 print 'Total:', t5-t1
1566
9600553900d4 listen(0) -> listen(1) for Solaris 2
Guido van Rossum <guido@python.org>
parents: 1082
diff changeset
89 print 'Throughput:', round((BUFSIZE*count*0.001) / (t5-t1), 3),
300
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
90 print 'K/sec.'
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
91
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
92
09fb79e7baf7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
93 main()