Index: presubmit_canned_checks.py |
diff --git a/presubmit_canned_checks.py b/presubmit_canned_checks.py |
index 9179fb6ee35436d654ecae91ed4e02692514d0b3..df6159664f05c4825d86ef737b10a3ac36511df7 100644 |
--- a/presubmit_canned_checks.py |
+++ b/presubmit_canned_checks.py |
@@ -788,17 +788,24 @@ def GetPylint(input_api, output_api, white_list=None, black_list=None, |
kwargs={'env': env, 'stdin': '\n'.join(files + extra_args)}, |
message=error_type) |
- # Always run pylint and pass it all the py files at once. |
- # Passing py files one at time is slower and can produce |
- # different results. input_api.verbose used to be used |
- # to enable this behaviour but differing behaviour in |
- # verbose mode is not desirable. |
- # Leave this unreachable code in here so users can make |
- # a quick local edit to diagnose pylint issues more |
- # easily. |
+ # Always run pylint and pass it all the (sharded) py files at once. Passing py |
+ # files one at time is slower and can produce different results. |
+ # input_api.verbose used to be used to enable this behaviour but differing |
+ # behaviour in verbose mode is not desirable. |
+ # |
+ # We shard the pylint invocations by the number of CPUs, since they tend to |
+ # saturate a CPU entirely (but never more than 100%, thanks to the GIL). |
if True: |
- return [GetPylintCmd(files)] |
+ # number of files to allow in one command |
+ limit = max(len(files) / input_api.cpu_count, 1) |
+ ret = [] |
+ while files: |
+ ret.append(GetPylintCmd(files[:limit])) |
+ files = files[limit:] |
nednguyen
2015/06/12 18:06:14
If we shard the files arbitrarily, how does this a
|
+ return ret |
else: |
+ # Leave this unreachable code in here so users can make a quick local edit |
+ # to diagnose pylint issues more easily. |
return map(lambda x: GetPylintCmd([x]), files) |