Matt Joiner, 10.02.2012 15:48:
Pure python code running in python "threads" on CPython behaves like fibers. I'd like to point out the word "external" in your statement.
I don't believe this to be true. Fibers are not preempted. The GIL is released at regular intervals to allow the effect of preempted switching. Many other behaviours of Python threads are still native thread like, particularly in their interaction with other components and the OS.
Absolutely. Even C extensions cannot always prevent a thread switch from happening when they need to call back into CPython's C-API.
GIL + Threads = Simplified, non parallel interpreter
Note that this also applies to PyPy, so even "interpreter" isn't enough of a generalisation. I think it's best to speak of the GIL as what it is: a lock that protects internal state of the CPython runtime (and also some external code, when used that way). Rather convenient, if you ask me. Stefan