Mercurial > cpython-lru_cache-weakref
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 |
| 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 | 2 |
| 3 # Test network throughput. | |
| 4 # | |
| 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 | |
| 8 # | |
| 9 # The server will service multiple clients until it is killed. | |
| 10 # | |
| 11 # The client performs one transfer of count*BUFSIZE bytes and | |
| 12 # measures the time it takes (roundtrip!). | |
| 13 | |
| 14 | |
| 15 import sys, time | |
| 16 from socket import * | |
| 17 | |
| 18 MY_PORT = 50000 + 42 | |
| 19 | |
| 20 BUFSIZE = 1024 | |
| 21 | |
| 22 | |
| 23 def main(): | |
| 24 if len(sys.argv) < 2: | |
| 25 usage() | |
| 873 | 26 if sys.argv[1] == '-s': |
| 300 | 27 server() |
| 873 | 28 elif sys.argv[1] == '-c': |
| 300 | 29 client() |
| 30 else: | |
| 31 usage() | |
| 32 | |
| 33 | |
| 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) | |
| 39 | |
| 40 | |
| 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) | |
|
1566
9600553900d4
listen(0) -> listen(1) for Solaris 2
Guido van Rossum <guido@python.org>
parents:
1082
diff
changeset
|
48 s.listen(1) |
| 300 | 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 | |
| 60 | |
| 61 | |
| 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' | |
|
1566
9600553900d4
listen(0) -> listen(1) for Solaris 2
Guido van Rossum <guido@python.org>
parents:
1082
diff
changeset
|
72 t1 = time.time() |
| 300 | 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 | 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 | 77 i = 0 |
| 78 while i < count: | |
| 79 i = i+1 | |
| 80 s.send(testdata) | |
| 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 | 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 | 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 | |
|
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 | 90 print 'K/sec.' |
| 91 | |
| 92 | |
| 93 main() |
