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