1827
1828
termios.tcsetattr(fd, termios.TCSADRAIN, settings)
1832
if sys.platform == 'linux2':
1833
def _local_concurrency():
1835
prefix = 'processor'
1836
for line in file('/proc/cpuinfo', 'rb'):
1837
if line.startswith(prefix):
1838
concurrency = int(line[line.find(':')+1:]) + 1
1840
elif sys.platform == 'darwin':
1841
def _local_concurrency():
1842
return subprocess.Popen(['sysctl', '-n', 'hw.availcpu'],
1843
stdout=subprocess.PIPE).communicate()[0]
1844
elif sys.platform == 'sunos5':
1845
def _local_concurrency():
1846
return subprocess.Popen(['psrinfo', '-p',],
1847
stdout=subprocess.PIPE).communicate()[0]
1848
elif sys.platform == "win32":
1849
def _local_concurrency():
1850
# This appears to return the number of cores.
1851
return os.environ.get('NUMBER_OF_PROCESSORS')
1853
def _local_concurrency():
1858
_cached_local_concurrency = None
1860
def local_concurrency(use_cache=True):
1861
"""Return how many processes can be run concurrently.
1863
Rely on platform specific implementations and default to 1 (one) if
1864
anything goes wrong.
1866
global _cached_local_concurrency
1867
if _cached_local_concurrency is not None and use_cache:
1868
return _cached_local_concurrency
1871
concurrency = _local_concurrency()
1872
except (OSError, IOError):
1875
concurrency = int(concurrency)
1876
except (TypeError, ValueError):
1879
_cached_concurrency = concurrency