summaryrefslogtreecommitdiffstats
path: root/meta/lib/oe/utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'meta/lib/oe/utils.py')
-rw-r--r--meta/lib/oe/utils.py29
1 files changed, 29 insertions, 0 deletions
diff --git a/meta/lib/oe/utils.py b/meta/lib/oe/utils.py
index 0a1d1080c9..92e21a4e0e 100644
--- a/meta/lib/oe/utils.py
+++ b/meta/lib/oe/utils.py
@@ -151,3 +151,32 @@ def execute_pre_post_process(d, cmds):
151 if cmd != '': 151 if cmd != '':
152 bb.note("Executing %s ..." % cmd) 152 bb.note("Executing %s ..." % cmd)
153 bb.build.exec_func(cmd, d) 153 bb.build.exec_func(cmd, d)
154
155def multiprocess_exec(commands, function):
156 import signal
157 import multiprocessing
158
159 if not commands:
160 return []
161
162 def init_worker():
163 signal.signal(signal.SIGINT, signal.SIG_IGN)
164
165 nproc = min(multiprocessing.cpu_count(), len(commands))
166 pool = bb.utils.multiprocessingpool(nproc, init_worker)
167 imap = pool.imap(function, commands)
168
169 try:
170 results = list(imap)
171 pool.close()
172 pool.join()
173 results = []
174 for result in results:
175 if result is not None:
176 results.append(result)
177 return results
178
179 except KeyboardInterrupt:
180 pool.terminate()
181 pool.join()
182 raise