On Thu, Dec 12, 2013 at 12:06 AM, marcinmltd <> wrote: > Hello, > > I'm big fan of multiprocessing module, but recently I started looking at > threading in Python more closely and got couple of questions I hope You can > help me with: > > 1. When I run two or more threads in my python process are they really run > concurrently on mulicore machine? > > 2. Browsing through documentation it looks like python interpreter protects > its sensitive states by using GIL. Can you guys list situations when this > happens? > > 2. What would be general advice from python experts on when to use threadng > and when switch to multliprocessing in python? Is the decision still > influenced by how often we need to comunicate between the tasks as it's in > C\C++? Jython and IronPython reportedly thread well generally. CPython threads I/O-bound tasks well, but as soon as you introduce one CPU-bound thread, the other threads start to have problems. Pypy is probably the same as CPython, at least until they get their STM working well. Multiprocessing can do CPU-bound and I/O-bound workloads, but starting a new process takes longer than starting a new thread (especially on Windows). Inter-thread/process communication is likely slower on multiprocessing than multithreading as well, but this is merely my inference. Note: CPython is what a lot of people call "Python"; CPython is a new term for the original implementation to distinguish it from the other implementations that exist today.