Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(290)

Unified Diff: sdk/lib/html/scripts/databasebuilder.py

Issue 11280175: Use worker pools in go.sh/databasebuilder.py. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: merge to head Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sdk/lib/html/scripts/databasebuilder.py
diff --git a/sdk/lib/html/scripts/databasebuilder.py b/sdk/lib/html/scripts/databasebuilder.py
index d75d033b55ed6ebaa530562d5657eedac1ed057d..81d6c0ea794a60c4750485c5e4a535157c31ed4d 100755
--- a/sdk/lib/html/scripts/databasebuilder.py
+++ b/sdk/lib/html/scripts/databasebuilder.py
@@ -74,19 +74,7 @@ def _load_idl_file(file_name, import_options):
except SyntaxError, e:
raise RuntimeError('Failed to load file %s: %s'
% (file_name, e))
-
-def _load_idl_file_to_queue(file_name, import_options, result_queue):
- """Loads an IDL file into a result_queue to process in the master thread"""
- try:
- result = _load_idl_file(file_name, import_options)
- result_queue.put(result, False)
- return 0
- except RuntimeError, e:
- result_queue.put(e, False)
- return 1
- except:
- result_queue.put('Unknown error loading %s' % file_name, False)
- return 1
+
class DatabaseBuilder(object):
def __init__(self, database):
@@ -429,25 +417,17 @@ class DatabaseBuilder(object):
def import_idl_files(self, file_paths, import_options, parallel):
if parallel:
# Parse the IDL files in parallel.
- result_queue = multiprocessing.Queue(len(file_paths))
- jobs = [ multiprocessing.Process(target=_load_idl_file_to_queue,
- args=(file_path, import_options,
- result_queue))
- for file_path in file_paths ]
+ pool = multiprocessing.Pool()
try:
- for job in jobs:
- job.start()
- for job in jobs:
- # Timeout and throw after 5 sec.
- result = result_queue.get(True, 5)
- if isinstance(result, IDLFile):
- self._process_idl_file(result, import_options)
- else:
- raise result
+ for file_path in file_paths:
+ pool.apply_async(_load_idl_file,
+ [ file_path, import_options],
+ callback = lambda idl_file:
+ self._process_idl_file(idl_file, import_options))
+ pool.close()
+ pool.join()
except:
- # Clean up child processes on error.
- for job in jobs:
- job.terminate()
+ pool.terminate()
raise
else:
# Parse the IDL files in serial.
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698