Python 3 is slower than Python 2?
Recently I was playing with concurrent.futures. Following a comment on reddit, I got to the presentation of David Beazley entitled Understanding the Python GIL.
It’s a very interesting talk and from this I learned that Python 3.2 got a new GIL implementation! Out of curiosity I compared the performance of Python 2.7 and 3.3. The test machine had 4 cores. I made a CPU bound test script with three variations: (1) basic, single-threaded version, (2) using 4 threads, and (3) using 4 processes.
The results were surprising for me because Python 2.7 turned out to be faster!
(Legends: Py2 = Python 2.7.4, Py3 = Python 3.3.1)
basic.py:
Py2: 5.32 sec, Py3: 9.66 sec
with_threads:
Py2: 13.41 sec, Py3: 17.32 sec
with_processes:
Py2: 1.28 sec, Py3: 2.27 sec
You can also try the scripts, they are here.

Any idea why Py3 is so much slower than Py2? In the other hand additional time caused by threads is smaller in Py3…
But again… CPU bound task should be way slower with threads on Py3 because of GIL timeout and many context switching… It don’t get it.