[Python-checkins] cpython: Closes #14421: use with statement to properly close socket in bandwidth test.

georg.brandl python-checkins at python.org
Tue Mar 27 07:43:47 CEST 2012


http://hg.python.org/cpython/rev/505aea930985
changeset:   75964:505aea930985
user:        Georg Brandl <georg at python.org>
date:        Tue Mar 27 07:43:53 2012 +0200
summary:
  Closes #14421: use with statement to properly close socket in bandwidth test.

files:
  Tools/ccbench/ccbench.py |  112 +++++++++++++-------------
  1 files changed, 56 insertions(+), 56 deletions(-)


diff --git a/Tools/ccbench/ccbench.py b/Tools/ccbench/ccbench.py
--- a/Tools/ccbench/ccbench.py
+++ b/Tools/ccbench/ccbench.py
@@ -435,70 +435,70 @@
 def run_bandwidth_test(func, args, nthreads):
     # Create a listening socket to receive the packets. We use UDP which should
     # be painlessly cross-platform.
-    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
-    sock.bind(("127.0.0.1", 0))
-    addr = sock.getsockname()
+    with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as sock:
+        sock.bind(("127.0.0.1", 0))
+        addr = sock.getsockname()
 
-    duration = BANDWIDTH_DURATION
-    packet_size = BANDWIDTH_PACKET_SIZE
-
-    results = []
-    threads = []
-    end_event = []
-    start_cond = threading.Condition()
-    started = False
-    if nthreads > 0:
-        # Warm up
-        func(*args)
+        duration = BANDWIDTH_DURATION
+        packet_size = BANDWIDTH_PACKET_SIZE
 
         results = []
-        loop = TimedLoop(func, args)
-        ready = []
-        ready_cond = threading.Condition()
+        threads = []
+        end_event = []
+        start_cond = threading.Condition()
+        started = False
+        if nthreads > 0:
+            # Warm up
+            func(*args)
 
-        def run():
+            results = []
+            loop = TimedLoop(func, args)
+            ready = []
+            ready_cond = threading.Condition()
+
+            def run():
+                with ready_cond:
+                    ready.append(None)
+                    ready_cond.notify()
+                with start_cond:
+                    while not started:
+                        start_cond.wait()
+                loop(start_time, duration * 1.5, end_event, do_yield=False)
+
+            for i in range(nthreads):
+                threads.append(threading.Thread(target=run))
+            for t in threads:
+                t.setDaemon(True)
+                t.start()
+            # Wait for threads to be ready
             with ready_cond:
-                ready.append(None)
-                ready_cond.notify()
-            with start_cond:
-                while not started:
-                    start_cond.wait()
-            loop(start_time, duration * 1.5, end_event, do_yield=False)
+                while len(ready) < nthreads:
+                    ready_cond.wait()
 
-        for i in range(nthreads):
-            threads.append(threading.Thread(target=run))
-        for t in threads:
-            t.setDaemon(True)
-            t.start()
-        # Wait for threads to be ready
-        with ready_cond:
-            while len(ready) < nthreads:
-                ready_cond.wait()
+        # Run the client and wait for the first packet to arrive before
+        # unblocking the background threads.
+        process = run_bandwidth_client(addr=addr,
+                                       packet_size=packet_size,
+                                       duration=duration)
+        _time = time.time
+        # This will also wait for the parent to be ready
+        s = _recv(sock, packet_size)
+        remote_addr = eval(s.partition('#')[0])
 
-    # Run the client and wait for the first packet to arrive before
-    # unblocking the background threads.
-    process = run_bandwidth_client(addr=addr,
-                                   packet_size=packet_size,
-                                   duration=duration)
-    _time = time.time
-    # This will also wait for the parent to be ready
-    s = _recv(sock, packet_size)
-    remote_addr = eval(s.partition('#')[0])
+        with start_cond:
+            start_time = _time()
+            started = True
+            start_cond.notify(nthreads)
 
-    with start_cond:
-        start_time = _time()
-        started = True
-        start_cond.notify(nthreads)
-
-    n = 0
-    first_time = None
-    while not end_event and BW_END not in s:
-        _sendto(sock, s, remote_addr)
-        s = _recv(sock, packet_size)
-        if first_time is None:
-            first_time = _time()
-        n += 1
-    end_time = _time()
+        n = 0
+        first_time = None
+        while not end_event and BW_END not in s:
+            _sendto(sock, s, remote_addr)
+            s = _recv(sock, packet_size)
+            if first_time is None:
+                first_time = _time()
+            n += 1
+        end_time = _time()
 
     end_event.append(None)
     for t in threads:

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list