16 pool_size =
int(os.getenv(
'GYP_LINK_CONCURRENCY', 0))
20 if sys.platform
in (
'win32',
'cygwin'):
23 class MEMORYSTATUSEX(ctypes.Structure):
25 (
"dwLength", ctypes.c_ulong),
26 (
"dwMemoryLoad", ctypes.c_ulong),
27 (
"ullTotalPhys", ctypes.c_ulonglong),
28 (
"ullAvailPhys", ctypes.c_ulonglong),
29 (
"ullTotalPageFile", ctypes.c_ulonglong),
30 (
"ullAvailPageFile", ctypes.c_ulonglong),
31 (
"ullTotalVirtual", ctypes.c_ulonglong),
32 (
"ullAvailVirtual", ctypes.c_ulonglong),
33 (
"sullAvailExtendedVirtual", ctypes.c_ulonglong),
36 stat = MEMORYSTATUSEX(dwLength=ctypes.sizeof(MEMORYSTATUSEX))
37 ctypes.windll.kernel32.GlobalMemoryStatusEx(ctypes.byref(stat))
39 mem_limit =
max(1, stat.ullTotalPhys // (4 * (2**30)))
40 hard_cap =
max(1,
int(os.getenv(
'GYP_LINK_CONCURRENCY_MAX', 2**32)))
41 return min(mem_limit, hard_cap)
42 elif sys.platform.startswith(
'linux'):
43 if os.path.exists(
"/proc/meminfo"):
44 with open(
"/proc/meminfo")
as meminfo:
45 memtotal_re = re.compile(
r'^MemTotal:\s*(\d*)\s*kB')
47 match = memtotal_re.match(line)
51 return max(1,
int(match.group(1)) // (8 * (2**20)))
53 elif sys.platform ==
'darwin':
56 subprocess.check_output([
'sysctl',
'-n',
'hw.memsize']))
59 return max(1, avail_bytes // (4 * (2**30)))
static float max(float r, float g, float b)
static float min(float r, float g, float b)
def GetDefaultConcurrentLinks()
def print(*args, **kwargs)