diff --git a/tools/buildgen/generate_projects.py b/tools/buildgen/generate_projects.py
index e0bd6759bd0e46698a1b119aa26ea56207a2081d..90abd703f6980950984f62a31db0fee37c460324 100755
--- a/tools/buildgen/generate_projects.py
+++ b/tools/buildgen/generate_projects.py
@@ -34,6 +34,7 @@ import os
 import shutil
 import sys
 import tempfile
+import multiprocessing
 sys.path.append(os.path.join(os.path.dirname(sys.argv[0]), '..', 'run_tests'))
 
 assert sys.argv[1:], 'run generate_projects.sh instead of this directly'
@@ -55,7 +56,7 @@ for root, dirs, files in os.walk('templates'):
       out = out_dir + '/' + os.path.splitext(f)[0]
       if not os.path.exists(out_dir):
         os.makedirs(out_dir)
-      cmd = ['python', 'tools/buildgen/mako_renderer.py']
+      cmd = ['python2.7', 'tools/buildgen/mako_renderer.py']
       for plugin in plugins:
         cmd.append('-p')
         cmd.append(plugin)
@@ -73,7 +74,7 @@ for root, dirs, files in os.walk('templates'):
       cmd.append(root + '/' + f)
       jobs.append(jobset.JobSpec(cmd, shortname=out))
 
-jobset.run(jobs)
+jobset.run(jobs, maxjobs=multiprocessing.cpu_count())
 
 if test is not None:
   for s, g in test.iteritems():
diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py
index 38c06764b9b5c81155754ec8ba7cb93bfdbebb73..51008538f274025ff97535cb952dbc39949cc903 100755
--- a/tools/run_tests/run_tests.py
+++ b/tools/run_tests/run_tests.py
@@ -728,7 +728,7 @@ def _start_port_server(port_server_port):
   if not running:
     port_log = open('portlog.txt', 'w')
     port_server = subprocess.Popen(
-        ['python', 'tools/run_tests/port_server.py', '-p', '%d' % port_server_port],
+        ['python2.7', 'tools/run_tests/port_server.py', '-p', '%d' % port_server_port],
         stderr=subprocess.STDOUT,
         stdout=port_log)
     # ensure port server is up