aboutsummaryrefslogtreecommitdiffstats
path: root/lib/bb/cooker.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/bb/cooker.py')
-rw-r--r--lib/bb/cooker.py29
1 files changed, 11 insertions, 18 deletions
diff --git a/lib/bb/cooker.py b/lib/bb/cooker.py
index 492cf6e3a..bb09dff82 100644
--- a/lib/bb/cooker.py
+++ b/lib/bb/cooker.py
@@ -32,7 +32,6 @@ import sre_constants
import threading
from cStringIO import StringIO
from contextlib import closing
-from concurrent import futures
from functools import wraps
from collections import defaultdict
import bb, bb.exceptions, bb.command
@@ -1453,16 +1452,20 @@ class CookerParser(object):
self.start()
def start(self):
+ def init(cfg):
+ parse_file.cfg = cfg
+ multiprocessing.util.Finalize(None, bb.codeparser.parser_cache_save, args=(self.cooker.configuration.data, ), exitpriority=1)
+
self.results = self.load_cached()
if self.toparse:
bb.event.fire(bb.event.ParseStarted(self.toparse), self.cfgdata)
- parse_file.cfg = self.cfgdata
- multiprocessing.util.Finalize(None, bb.codeparser.parser_cache_save, args=(self.cfgdata,), exitpriority=1)
- self.executor = futures.ProcessPoolExecutor(max_workers=self.num_processes)
- self.futures = dict((self.executor.submit(parse_file, task), task) for task in self.willparse)
- self.results = itertools.chain(self.results, self.parse_gen())
+ self.pool = multiprocessing.Pool(self.num_processes, init, [self.cfgdata])
+ parsed = self.pool.imap(parse_file, self.willparse)
+ self.pool.close()
+
+ self.results = itertools.chain(self.results, parsed)
def shutdown(self, clean=True):
if not self.toparse:
@@ -1475,9 +1478,8 @@ class CookerParser(object):
self.total)
bb.event.fire(event, self.cfgdata)
else:
- for future in self.futures:
- future.cancel()
- self.executor.shutdown()
+ self.pool.terminate()
+ self.pool.join()
sync = threading.Thread(target=self.bb_cache.sync)
sync.start()
@@ -1489,15 +1491,6 @@ class CookerParser(object):
cached, infos = self.bb_cache.load(filename, appends, self.cfgdata)
yield not cached, infos
- def parse_gen(self):
- for future in futures.as_completed(self.futures):
- task = self.futures[future]
- exc = future.exception()
- if exc:
- raise exc
- else:
- yield future.result()
-
def parse_next(self):
try:
parsed, result = self.results.next()