2016-05-23 15 views
3

Ich bin neu bei Python und ich lerne Threading und GIL. Dies sind die Statistiken von lscpu Befehl:Python Threading Performance vs Anzahl der Kerne

Architecture:   x86_64 
CPU op-mode(s):  32-bit, 64-bit 
Byte Order:   Little Endian 
CPU(s):    4 
On-line CPU(s) list: 0-3 
Thread(s) per core: 2 
Core(s) per socket: 2 
Socket(s):    1 
NUMA node(s):   1 
Vendor ID:    GenuineIntel 
CPU family:   6 
Model:     69 
Stepping:    1 
CPU MHz:    1700.062 
BogoMIPS:    4789.05 
Virtualization:  VT-x 
L1d cache:    32K 
L1i cache:    32K 
L2 cache:    256K 
L3 cache:    3072K 
NUMA node0 CPU(s):  0-3 

Als ich diesen einfachen Python lief Beispiel Einfädeln, erhalte ich die folgende Ausgabe.

import time 
import threading 

def counter(n): 
    for i in range(0,n): 
     i = i+1 
    return 

t1 = threading.Thread(target=counter, args = (10000000,)) 
t2 = threading.Thread(target=counter, args = (10000000,)) 

t0 = time.clock() 
t1.start() 
t2.start() 
t1.join() 
t2.join() 
t3 = time.clock() 

print "Total time : %s"%str(t3-t0) 

[email protected]:~/Desktop$ python threads.py 
Total time : 2.115326 

Aber wenn ich deaktivieren 3 Kerne und Wieder führen Sie den Code:

[email protected]:~/Desktop$ python threads.py 
Total time : 1.115442 

Diese Zahlen bleiben mehr oder weniger das gleiche. Warum ist das so?? Jemand erklären. Vielen Dank im Voraus ...

Antwort

2

Die Threading-Bibliothek, die Sie verwenden, verwendet nicht mehrere Kerne gleichzeitig zur Berechnung.

Verwenden Sie stattdessen das multiprocessing-Modul für das computergesteuerte Threading. Sie sollten mehr "erwartete" Ergebnisse sehen.

+0

Und denken Sie daran Dinge wie dynamische Frequenzskalierung (TurboBoost etc.) – renemilk

+0

'Multiprocessing' verwendet keine Threads, es ist ein Paket, das Laichprozesse unterstützt [sic], die nicht ganz gleich ist. –

+0

Danke für die Antwort, aber ich würde gerne wissen, warum es langsamer wird, wenn die Anzahl der aktiven Kerne mehr ist –