Thread imbalance

Ivan Voras ivoras at fer.hr
Sun Feb 5 10:33:11 EST 2006


Peter Hansen wrote:

> Ivan, what makes you say that Python is bad for threads?  Did the 
> qualifcation "concurrently executing/computing" have some significance 
> that I missed?

Because of the GIL (Giant interpreter lock). It can be a matter of 
opinion, but by "good threading implementation" I mean that all threads 
in the application should run "natively" on the underlying (p)threads 
library at all times, without implicit serialization. For example, Java 
and perl do this, possibly also lua and C#. Python and Ruby have a giant 
interpreter lock which prevents two threads of pure python code (not 
"code written in C" :)) ) in one interperter process executing at the 
same time.

Much can be said about "at the same time" part, but at least in one case 
it is unambiguous: in multiprocessor machines. Someone writing a 
multithreaded server application could get in trouble if he doesn't know 
this (of course, it depends on the exact circumstances and the purpose 
of the application; for example system calls which block, such as read() 
and write() can execute concurrently, while two "while True: pass" 
threads cannot). This is not new information, it's available in many 
forms in this newsgroup's archives.

I think it would also make implicit problems in the situation like that 
of the OP, where there's a "watchdog" thread monitoring some job or 
jobs, and the job(s) intefere(s) with the GIL by contenting for it, 
possibly when there are lots of threads or frequent spawning of 
processes or threads.

I don't have the intention to badmouth Python, but to emphasize that one 
should be familira with all the details of the tool one's using :)



More information about the Python-list mailing list