#!/usr/bin/env python # Copyright 2015 the V8 project authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """ This script calls the first argument for each of the following arguments in parallel. E.g. parallel.py "clang --opt" file1 file2 calls clang --opt file1 clang --opt file2 The output (stdout and stderr) is concatenated sequentially in the form: ______________ file1 <output of clang --opt file1> ______________ finish <exit code of clang --opt file1> ______________ ______________ file2 <output of clang --opt file2> ______________ finish <exit code of clang --opt file2> ______________ """ # for py2/py3 compatibility from __future__ import print_function import itertools import multiprocessing import subprocess import sys def invoke(cmdline): try: return (subprocess.check_output( cmdline, shell=True, stderr=subprocess.STDOUT), 0) except subprocess.CalledProcessError as e: return (e.output, e.returncode) if __name__ == '__main__': assert len(sys.argv) > 2 processes = multiprocessing.cpu_count() pool = multiprocessing.Pool(processes=processes) cmdlines = ["%s %s" % (sys.argv[1], filename) for filename in sys.argv[2:]] for filename, result in itertools.izip( sys.argv[2:], pool.imap(invoke, cmdlines)): print("______________ %s" % filename) print(result[0]) print("______________ finish %d ______________" % result[1])