Hep*_*tus 11 python cpu python-multiprocessing
任何人都可以告诉我为什么Python的multiprocessing.cpu_count()功能会1在调用带有四个ARMv7处理器的Jetson TK1时返回?
>>> import multiprocessing
>>> multiprocessing.cpu_count()
1
Run Code Online (Sandbox Code Playgroud)
Jetson TK1开发板或多或少都是开箱即用的,没有人与cpusets混淆.在同一个Python shell中,我可以打印内容,/proc/self/status它告诉我该进程应该可以访问所有四个核心:
>>> print open('/proc/self/status').read()
----- (snip) -----
Cpus_allowed: f
Cpus_allowed_list: 0-3
----- (snip) -----
Run Code Online (Sandbox Code Playgroud)
还有什么可能导致这种行为cpu_count()?
为了测试Klaus的假设,我使用以下代码来运行一个非常简单的实验:
import multiprocessing
def f(x):
n = 0
for i in xrange(10000):
n = max(n, multiprocessing.cpu_count())
return n
p = multiprocessing.Pool(5)
for i in range(10):
print p.map(f, [1,2,3,4,5])
Run Code Online (Sandbox Code Playgroud)
其中产生了以下输出:
[3, 3, 3, 3, 1]
[4, 3, 3, 3, 3]
[4, 3, 3, 3, 3]
[3, 3, 4, 3, 3]
[4, 3, 3, 3, 3]
[3, 3, 4, 3, 3]
[4, 3, 3, 3, 3]
[3, 3, 4, 3, 3]
[3, 3, 3, 4, 3]
[4, 3, 3, 3, 3]
Run Code Online (Sandbox Code Playgroud)
只运行一次迭代p.map(f, [1,2,3,4,5])通常会产生[1, 1, 1, 1, 1],虽然偶尔2会出现一个列表元素.
Kla*_* D. 21
在Linux上,系统multiprocessing.cpu_count()依赖于一个sysconf (_SC_NPROCESSORS_ONLN)调用,该调用返回在线 CPU 的数量,而sysconf (_SC_NPROCESSORS_CONF)后者则返回已配置的 CPU数量.
具有高级CPU电源管理功能的系统中的值可能不同,这些功能将CPU核心设置为脱机以节省能源或具有类似的动态CPU激活功能.
os.cpu_count() 的文档(声明它返回 CPU 总数,而不是可用 CPU 数量)提供了一种计算可用 CPU 的方法:
len(os.sched_getaffinity(0))
Run Code Online (Sandbox Code Playgroud)
请参阅https://docs.python.org/3/library/os.html#os.cpu_count
| 归档时间: |
|
| 查看次数: |
24097 次 |
| 最近记录: |