diff --git a/setup.py b/setup.py index 28250618..05155ce3 100644 --- a/setup.py +++ b/setup.py @@ -22,6 +22,35 @@ import sys from setuptools import Extension, find_packages, setup + +# https://stackoverflow.com/a/13176803 +# monkey-patch for parallel compilation +def parallelCCompile(self, sources, output_dir=None, macros=None, include_dirs=None, debug=0, + extra_preargs=None, extra_postargs=None, depends=None): + # those lines are copied from distutils.ccompiler.CCompiler directly + macros, objects, extra_postargs, pp_opts, build = self._setup_compile(output_dir, macros, + include_dirs, sources, + depends, extra_postargs) + cc_args = self._get_cc_args(pp_opts, debug, extra_preargs) + # parallel code + N = 2 # number of parallel compilations + import multiprocessing.pool + def _single_compile(obj): + try: + src, ext = build[obj] + except KeyError: + return + self._compile(obj, src, ext, cc_args, extra_postargs, pp_opts) + + # convert to list, imap is evaluated on-demand + list(multiprocessing.pool.ThreadPool(N).imap(_single_compile, objects)) + return objects + + +import distutils.ccompiler + +distutils.ccompiler.CCompiler.compile = parallelCCompile + with open("vnpy/__init__.py", "rb") as f: version_line = re.search( r"__version__\s+=\s+(.*)", f.read().decode("utf-8")