From 2dec307b95b755231648c001a9bc3d4607378380 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Mon, 21 Dec 2009 19:15:08 +0200 Subject: Rewritten. --- test-flacs | 50 ++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 42 insertions(+), 8 deletions(-) (limited to 'test-flacs') diff --git a/test-flacs b/test-flacs index e3b9a92..3028adc 100755 --- a/test-flacs +++ b/test-flacs @@ -5,12 +5,20 @@ import multiprocessing import os import subprocess import sys +import time -def test_flac(filename): - p = subprocess.Popen(['flac', '--totally-silent', '--test', filename]) - p.communicate() - return filename, p.returncode == 0 +def test_flacs(job_queue, result_queue): + i = 0 + for filename in iter(job_queue.get, None): + p = subprocess.Popen(['flac', '--totally-silent', '--test', filename]) + p.communicate() + result_queue.put((filename, p.returncode == 0)) + i += 1 + if i >= 10: + time.sleep(1) + i = 0 + def find_files(root): pathnames = set() @@ -20,7 +28,33 @@ def find_files(root): pathnames.add(pathname) return pathnames -pool = multiprocessing.Pool() -for filename, ok in pool.map(test_flac, find_files(sys.argv[1])): - if not ok: - print 'FAIL:', filename + +files = find_files(sys.argv[1]) + +job_queue = multiprocessing.Queue() +result_queue = multiprocessing.Queue() +for job in files: + job_queue.put(job) +for i in range(multiprocessing.cpu_count()): + p = multiprocessing.Process(target=test_flacs, + args=(job_queue, result_queue)) + p.start() +total = len(files) +bad = list() +for done in range(total): + result = result_queue.get() + sys.stderr.write('\r%d / %d done' % (done + 1, total)) + sys.stderr.flush() + if result: + filename, ok = result + if not ok: + bad.append(filename) + +for i in range(multiprocessing.cpu_count()): + job_queue.put(None) + +sys.stderr.write('\n') + +for filename in bad: + print 'BAD:', filename + -- cgit v1.2.1