Currently exceptions that happen in pool commands are ignored. Any errors would be printed on the console but everything else is silent.
Switch to use pool.map_async which allows for an error_callback which we can use to detect exceptions and make sure these errors are handled. Signed-off-by: Richard Purdie <richard.pur...@linuxfoundation.org> --- meta/lib/oe/utils.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/meta/lib/oe/utils.py b/meta/lib/oe/utils.py index 822d0cd..643ab78 100644 --- a/meta/lib/oe/utils.py +++ b/meta/lib/oe/utils.py @@ -224,25 +224,30 @@ def multiprocess_exec(commands, function): def init_worker(): signal.signal(signal.SIGINT, signal.SIG_IGN) + fails = [] + + def failures(res): + fails.append(res) + nproc = min(multiprocessing.cpu_count(), len(commands)) pool = bb.utils.multiprocessingpool(nproc, init_worker) - imap = pool.imap(function, commands) try: - res = list(imap) + mapresult = pool.map_async(function, commands, error_callback=failures) + pool.close() pool.join() - results = [] - for result in res: - if result is not None: - results.append(result) - return results - + results = mapresult.get() except KeyboardInterrupt: pool.terminate() pool.join() raise + if fails: + raise fails[0] + + return results + def squashspaces(string): import re return re.sub("\s+", " ", string).strip() -- 2.7.4 -- _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core