()
Returns a best-guess for a number of concurrent links.
Returns a best-guess for a number of concurrent links.
Returns a best - guess for a number of concurrent links .
def GetDefaultConcurrentLinks():
    """Returns a best-guess for a number of concurrent links."""
    pool_size = int(os.environ.get("GYP_LINK_CONCURRENCY", 0))
    if pool_size:
        return pool_size

    if sys.platform in ("win32", "cygwin"):
        import ctypes

        class MEMORYSTATUSEX(ctypes.Structure):
            _fields_ = [
                ("dwLength", ctypes.c_ulong),
                ("dwMemoryLoad", ctypes.c_ulong),
                ("ullTotalPhys", ctypes.c_ulonglong),
                ("ullAvailPhys", ctypes.c_ulonglong),
                ("ullTotalPageFile", ctypes.c_ulonglong),
                ("ullAvailPageFile", ctypes.c_ulonglong),
                ("ullTotalVirtual", ctypes.c_ulonglong),
                ("ullAvailVirtual", ctypes.c_ulonglong),
                ("sullAvailExtendedVirtual", ctypes.c_ulonglong),
            ]

        stat = MEMORYSTATUSEX()
        stat.dwLength = ctypes.sizeof(stat)
        ctypes.windll.kernel32.GlobalMemoryStatusEx(ctypes.byref(stat))

        # VS 2015 uses 20% more working set than VS 2013 and can consume all RAM
        # on a 64 GB machine.
        mem_limit = max(1, stat.ullTotalPhys // (5 * (2 ** 30)))  # total / 5GB
        hard_cap = max(1, int(os.environ.get("GYP_LINK_CONCURRENCY_MAX", 2 ** 32)))
        return min(mem_limit, hard_cap)
    elif sys.platform.startswith("linux"):
        if os.path.exists("/proc/meminfo"):
            with open("/proc/meminfo") as meminfo:
                memtotal_re = re.compile(r"^MemTotal:\s*(\d*)\s*kB")
                for line in meminfo:
                    match = memtotal_re.match(line)
                    if not match:
                        continue
                    # Allow 8Gb per link on Linux because Gold is quite memory hungry
                    return max(1, int(match.group(1)) // (8 * (2 ** 20)))
        return 1
    elif sys.platform == "darwin":
        try:
            avail_bytes = int(subprocess.check_output(["sysctl", "-n", "hw.memsize"]))
            # A static library debug build of Chromium's unit_tests takes ~2.7GB, so
            # 4GB per ld process allows for some more bloat.
            return max(1, avail_bytes // (4 * (2 ** 30)))  # total / 4GB
        except subprocess.CalledProcessError:
            return 1
    else:
        # TODO(scottmg): Implement this for other platforms.
        return 1
def GetDefaultConcurrentLinks ( ) : pool_size = int ( os . environ . get ( "GYP_LINK_CONCURRENCY" , 0 ) ) if pool_size : return pool_size if sys . platform in ( "win32" , "cygwin" ) : import ctypes class MEMORYSTATUSEX ( ctypes . Structure ) : _fields_ = [ ( "dwLength" , ctypes . c_ulong ) , ( "dwMemoryLoad" , ctypes . c_ulong ) , ( "ullTotalPhys" , ctypes . c_ulonglong ) , ( "ullAvailPhys" , ctypes . c_ulonglong ) , ( "ullTotalPageFile" , ctypes . c_ulonglong ) , ( "ullAvailPageFile" , ctypes . c_ulonglong ) , ( "ullTotalVirtual" , ctypes . c_ulonglong ) , ( "ullAvailVirtual" , ctypes . c_ulonglong ) , ( "sullAvailExtendedVirtual" , ctypes . c_ulonglong ) , ] stat = MEMORYSTATUSEX ( ) stat . dwLength = ctypes . sizeof ( stat ) ctypes . windll . kernel32 . GlobalMemoryStatusEx ( ctypes . byref ( stat ) ) # VS 2015 uses 20% more working set than VS 2013 and can consume all RAM # on a 64 GB machine. mem_limit = max ( 1 , stat . ullTotalPhys // ( 5 * ( 2 ** 30 ) ) ) # total / 5GB hard_cap = max ( 1 , int ( os . environ . get ( "GYP_LINK_CONCURRENCY_MAX" , 2 ** 32 ) ) ) return min ( mem_limit , hard_cap ) elif sys . platform . startswith ( "linux" ) : if os . path . exists ( "/proc/meminfo" ) : with open ( "/proc/meminfo" ) as meminfo : memtotal_re = re . compile ( r"^MemTotal:\s*(\d*)\s*kB" ) for line in meminfo : match = memtotal_re . match ( line ) if not match : continue # Allow 8Gb per link on Linux because Gold is quite memory hungry return max ( 1 , int ( match . group ( 1 ) ) // ( 8 * ( 2 ** 20 ) ) ) return 1 elif sys . platform == "darwin" : try : avail_bytes = int ( subprocess . check_output ( [ "sysctl" , "-n" , "hw.memsize" ] ) ) # A static library debug build of Chromium's unit_tests takes ~2.7GB, so # 4GB per ld process allows for some more bloat. return max ( 1 , avail_bytes // ( 4 * ( 2 ** 30 ) ) ) # total / 4GB except subprocess . CalledProcessError : return 1 else : # TODO(scottmg): Implement this for other platforms. return 1