diff options
Diffstat (limited to 'meta/lib/oe/utils.py')
-rw-r--r-- | meta/lib/oe/utils.py | 29 |
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 | |||
155 | def 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 | ||