summaryrefslogtreecommitdiffstats
path: root/Tools/ccbench/ccbench.py
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/ccbench/ccbench.py')
-rw-r--r--Tools/ccbench/ccbench.py119
1 files changed, 59 insertions, 60 deletions
diff --git a/Tools/ccbench/ccbench.py b/Tools/ccbench/ccbench.py
index 9f7118f..60cec3e 100644
--- a/Tools/ccbench/ccbench.py
+++ b/Tools/ccbench/ccbench.py
@@ -10,7 +10,6 @@ ccbench, a Python concurrency benchmark.
import time
import os
import sys
-import functools
import itertools
import threading
import subprocess
@@ -435,70 +434,70 @@ def run_bandwidth_client(**kwargs):
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()
-
- def run():
+ threads = []
+ end_event = []
+ start_cond = threading.Condition()
+ started = False
+ if nthreads > 0:
+ # Warm up
+ func(*args)
+
+ 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)
-
- 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])
-
- 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)
+ 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)
- if first_time is None:
- first_time = _time()
- n += 1
- end_time = _time()
+ remote_addr = eval(s.partition('#')[0])
+
+ 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()
end_event.append(None)
for t in threads: