See also www.dabeaz.com/python/GIL.pdf.
richard@araminta:~$ cat t1
#! /usr/bin/python
def count(n):
while n > 0:
n -= 1
count(100000000)
count(100000000)
richard@araminta:~$ cat t2
#! /usr/bin/python
from threading import Thread
def count(n):
while n > 0:
n -= 1
t1 = Thread(target=count,args=(100000000,))
t1.start()
t2 = Thread(target=count,args=(100000000,))
t2.start()
t1.join(); t2.join()
richard@araminta:~$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
stepping : 11
cpu MHz : 2397.660
cache size : 4096 KB
physical id : 0
siblings : 1
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu de tsc msr pae cx8 apic sep mtrr cmov pat clflush acpi mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc rep_good pni ssse3 cx16 lahf_lm
bogomips : 4797.58
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
stepping : 11
cpu MHz : 2397.660
cache size : 4096 KB
physical id : 0
siblings : 1
core id : 2
cpu cores : 1
apicid : 2
initial apicid : 2
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu de tsc msr pae cx8 apic sep mtrr cmov pat clflush acpi mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc rep_good pni ssse3 cx16 lahf_lm
bogomips : 4797.58
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
processor : 2
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
stepping : 11
cpu MHz : 2397.660
cache size : 4096 KB
physical id : 0
siblings : 1
core id : 1
cpu cores : 1
apicid : 1
initial apicid : 1
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu de tsc msr pae cx8 apic sep mtrr cmov pat clflush acpi mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc rep_good pni ssse3 cx16 lahf_lm
bogomips : 4797.58
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
processor : 3
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
stepping : 11
cpu MHz : 2397.660
cache size : 4096 KB
physical id : 0
siblings : 1
core id : 3
cpu cores : 1
apicid : 3
initial apicid : 3
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu de tsc msr pae cx8 apic sep mtrr cmov pat clflush acpi mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc rep_good pni ssse3 cx16 lahf_lm
bogomips : 4797.58
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
richard@araminta:~$ python -V
Python 2.5.2
richard@araminta:~$ uname -a
Linux araminta 2.6.26-2-xen-amd64 #1 SMP Wed Mar 10 00:29:48 UTC 2010 x86_64 GNU/Linux
richard@araminta:~$ time ./t1; time ./t1; time ./t1; time ./t2; time ./t2; time ./t2
real 0m16.525s
user 0m16.517s
sys 0m0.008s
real 0m16.549s
user 0m16.541s
sys 0m0.004s
real 0m16.522s
user 0m16.513s
sys 0m0.008s
real 0m41.883s
user 0m8.657s
sys 0m4.932s
real 0m38.345s
user 0m9.549s
sys 0m5.120s
real 0m41.051s
user 0m8.933s
sys 0m4.984s
richard@araminta:~$ /usr/local/python-3.1/bin/python3.1 -V
Python 3.1.2
richard@araminta:~$ for x in t{1,1,1,2,2,2}; do time /usr/local/python-3.1/bin/python3.1 $x; done
real 0m23.810s
user 0m23.805s
sys 0m0.004s
real 0m23.754s
user 0m23.741s
sys 0m0.008s
real 0m23.784s
user 0m23.781s
sys 0m0.000s
real 0m44.770s
user 0m25.510s
sys 0m12.529s
real 0m46.439s
user 0m24.098s
sys 0m13.977s
real 0m50.376s
user 0m24.926s
sys 0m15.553s
richard@sfere:~$ cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 6
model : 10
model name : AMD Athlon(tm) XP 3200+
stepping : 0
cpu MHz : 2209.997
cache size : 512 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 mmx fxsr sse syscall mmxext 3dnowext 3dnow up
bogomips : 4424.81
clflush size : 32
power management: ts
richard@sfere:~$ time ./t1; time ./t1; time ./t1; time ./t2; time ./t2; time ./t2
real 0m41.767s
user 0m41.411s
sys 0m0.012s
real 0m41.839s
user 0m41.523s
sys 0m0.004s
real 0m42.203s
user 0m41.859s
sys 0m0.016s
real 0m42.763s
user 0m42.219s
sys 0m0.152s
real 0m42.748s
user 0m42.151s
sys 0m0.204s
real 0m42.825s
user 0m42.191s
sys 0m0.188s