X-Git-Url: https://code.delx.au/transcoding/blobdiff_plain/4515ace8b9c4721c427a163b63341e8b2a5a374c..0e73df4a0a1266c75f2a83b5b5262d7823d4e28e:/batch-run diff --git a/batch-run b/batch-run index fa799df..43af531 100755 --- a/batch-run +++ b/batch-run @@ -10,70 +10,70 @@ import time def run(running_jobs, cmd): - p = subprocess.Popen(cmd, stdin=file(os.devnull, 'r')) - running_jobs.append(p) + p = subprocess.Popen(cmd, stdin=file(os.devnull, 'r')) + running_jobs.append(p) def wait_for_completion(max_jobs, running_jobs): - while len(running_jobs) >= max_jobs: - time.sleep(1) - for job in running_jobs: - if job.poll() is not None: - running_jobs.remove(job) - job.wait() + while len(running_jobs) >= max_jobs: + time.sleep(1) + for job in running_jobs: + if job.poll() is not None: + running_jobs.remove(job) + job.wait() def parse_file(fd): - def count_indent(s): - level = 0 - for ch in s: - if ch == "\t": - level += 1 - else: - break - return level + def count_indent(s): + level = 0 + for ch in s: + if ch == "\t": + level += 1 + else: + break + return level - for line in fd: - if not line.strip(): - continue # Ignore blank lines - level = count_indent(line) - line = line[level:] # Slice off the indentation - yield level, line - yield 0, None + for line in fd: + if not line.strip(): + continue # Ignore blank lines + level = count_indent(line) + line = line[level:] # Slice off the indentation + yield level, line + yield 0, None def batch_process(opts, lines): - running_jobs = [] - cmd = [] + running_jobs = [] + cmd = [] - for level, line in lines: - old_level = len(cmd) - 1 - if level <= old_level: - run(running_jobs, itertools.chain(*cmd)) - wait_for_completion(opts.jobs, running_jobs) + for level, line in lines: + old_level = len(cmd) - 1 + if level <= old_level: + run(running_jobs, itertools.chain(*cmd)) + wait_for_completion(opts.jobs, running_jobs) - # Delete all options that belong to groups that are indented more than - # this one - cmd = cmd[:level] - assert len(cmd) == level + # Delete all options that belong to groups that are indented more than + # this one + cmd = cmd[:level] + assert len(cmd) == level - if line: - cmd.append(shlex.split(line)) + if line: + cmd.append(shlex.split(line)) - # Wait for remaining jobs to finish - wait_for_completion(1, running_jobs) + # Wait for remaining jobs to finish + wait_for_completion(1, running_jobs) def parse_args(): - parser = optparse.OptionParser(usage="%prog batchfile1 [batchfile2] ...") - parser.add_option("-j", "--jobs", - action="store", dest="jobs", default=1, type="int", - help="The number of concurrent jobs to run") - opts, args = parser.parse_args(sys.argv[1:]) - opts.running_jobs = [] - return opts, args + parser = optparse.OptionParser(usage="%prog batchfile1 [batchfile2] ...") + parser.add_option("-j", "--jobs", + action="store", dest="jobs", default=1, type="int", + help="The number of concurrent jobs to run") + opts, args = parser.parse_args(sys.argv[1:]) + opts.running_jobs = [] + return opts, args def main(): - opts, args = parse_args() - for name in args: - batch_process(opts, parse_file(open(name))) + opts, args = parse_args() + for name in args: + batch_process(opts, parse_file(open(name))) if __name__ == "__main__": - main() + main()