Fix #395 (Build scripts: Fix thread leak)

This commit is contained in:
Kovid Goyal 2015-05-02 09:23:47 +05:30
parent baa5bf6a5b
commit 87073a4536

View File

@ -9,6 +9,7 @@ __copyright__ = '2014, Kovid Goyal <kovid at kovidgoyal.net>'
import subprocess import subprocess
from multiprocessing.dummy import Pool from multiprocessing.dummy import Pool
from functools import partial from functools import partial
from contextlib import closing
from setup.build_environment import cpu_count from setup.build_environment import cpu_count
@ -30,22 +31,24 @@ def create_job(cmd, human_text=None):
def parallel_build(jobs, log, verbose=True): def parallel_build(jobs, log, verbose=True):
p = Pool(cpu_count) p = Pool(cpu_count)
for ok, stdout, stderr in p.imap(run_worker, jobs): with closing(p):
if verbose or not ok: for ok, stdout, stderr in p.imap(run_worker, jobs):
log(stdout) if verbose or not ok:
if stderr: log(stdout)
log(stderr) if stderr:
if not ok: log(stderr)
return False if not ok:
return True return False
return True
def parallel_check_output(jobs, log): def parallel_check_output(jobs, log):
p = Pool(cpu_count) p = Pool(cpu_count)
for ok, stdout, stderr in p.imap( with closing(p):
partial(run_worker, decorate=False), ((j, '') for j in jobs)): for ok, stdout, stderr in p.imap(
if not ok: partial(run_worker, decorate=False), ((j, '') for j in jobs)):
log(stdout) if not ok:
if stderr: log(stdout)
log(stderr) if stderr:
raise SystemExit(1) log(stderr)
yield stdout raise SystemExit(1)
yield stdout