Python multiprocessing.cpu_count () gibt bei Nvidia Jetson TK1 mit 4 Kernen '1' zurück
Kann mir jemand sagen, warum Pythonmultiprocessing.cpu_count()
function würde @ zurückgeb1
wann auf einem Jetson TK1 mit vier ARMv7-Prozessoren aufgerufen?
>>> import multiprocessing
>>> multiprocessing.cpu_count()
1
Das Jetson TK1-Board ist praktisch sofort einsatzbereit, und niemand hat sich mit CPU-Sets herumgeschlagen. Aus derselben Python-Shell heraus kann ich den Inhalt von @ ausgebe/proc/self/status
und es sagt mir, dass der Prozess Zugriff auf alle vier Kerne haben sollte:
>>> print open('/proc/self/status').read()
----- (snip) -----
Cpus_allowed: f
Cpus_allowed_list: 0-3
----- (snip) -----
Was sonst könnte dieses Verhalten von @ verursachcpu_count()
?
Um die Hypothese von Klaus zu testen, habe ich den folgenden Code verwendet, um ein sehr einfaches Experiment durchzuführen:
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])
Welche die folgende Ausgabe erzeugt:
[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]
Running nur eine einzige Iteration vonp.map(f, [1,2,3,4,5])
produziert normalerweise[1, 1, 1, 1, 1]
, obwohl gelegentlich ein2
wird als eines der Listenelemente angezeigt.