2012-04-14 7 views
2

Ich versuche, die Anzahl von Nicht-HyperThreading-Kernen auf einem Computer mithilfe einer plattformübergreifenden Methode zu ermitteln.Python: Plattformübergreifende Lösung zur Erkennung von physischen Nicht-HT-CPUs?

Multiprozessing cpu_count erkennt nur die Gesamtzahl der Prozessoren, und ich kann/proc/cpuinfo auf Linux-Maschinen, um die Antwort zu finden. Ich suche jedoch eine Windows-Lösung.

Diese Newsgroup thread half ein wenig, aber ich habe immer noch nicht die Antwort gefunden.

+0

ich nicht die Korrelation mit Python sehen :) – luke14free

+0

Ich suche nach einem Kreuz -Plattformlösung in Python-Sprache. – wting

Antwort

3

Sie können Tim Goldens WMI-Bindungen verwenden, um auf wmi-Informationen zu CPUs unter Windows zuzugreifen. Siehe Tim's wmi module cookbook. Sie möchten wahrscheinlich die Klasse Win32_Processor verwenden - siehe the Microsoft documentation.

Beachten Sie, dass in den Bemerkungen Abschnitt der Dokumentation von Microsoft heißt es:

Um festzustellen, ob Hyperthreading für den Prozessor aktiviert ist, vergleichen NumberOfLogicalProcessors und NumberOfCores. Wenn Hyperthreading im BIOS für den Prozessor aktiviert ist, ist NumberOfCores kleiner als NumberOfLogicalProcessors. Zum Beispiel kann ein Dual-Prozessor-System, das zwei für Hyperthreading aktivierte Prozessoren enthält, vier Threads oder Programme oder gleichzeitig ausführen. In diesem Fall ist NumberOfCores 2 und NumberOfLogicalProcessors ist 4.

Dag Wieer's Blog eine Art und Weise zu extrahieren Hyperthreading Infos von /proc/cpuinfo auf Linux zeigt.

Ich denke, wenn die Ausgabe der ersten und zweiten Leitungen von

cat /proc/cpuinfo | egrep 'physical|processor' | grep -v sizes | \ 
        tail -n2 | cut -d : -f 2` 

unterscheidet, Hyperthreading aktiviert ist.

+0

Ich wollte nur darauf hinweisen, dass 'egrep' physical | processor '3 auf meinem i7 (2 Kerne + HT) zurückgibt, aber CPU-Kerne scheinen immer physische Kerne zurückzugeben. – wting

+0

Oh - das ist interessant. Es tut das nicht auf meinem i5 Laptop. Prost. – rorycl

0

Für eine plattformunabhängige Methode finden Sie die Bindungen Python hwloc:

ist
#!/usr/bin/env python 
import hwloc 
topology = hwloc.Topology() 
topology.load() 
print topology.get_nbobjs_by_type(hwloc.OBJ_CORE) 

hwloc entwickelt tragbare über OSes und Architekturen zu sein.

6

plattformunabhängig und in Python-Standardbibliothek:

psutil.cpu_count (logisch = False)

+2

das ist * nicht * ist die Python-Standard-Bibliothek, aber immer noch die beste Antwort meiner Meinung nach –

Verwandte Themen