Just keep in mind that via the GIL (Global Interpreter Lock) Python limits the system to executing one bytecode instruction at a time - Threads execute in a more serial fashion, switching context every 100 bytecode instructions or so (e.g. let Thread 1 have 100 bytecodes, then switch to Thread 2).
This is a good thing and a bad thing - internally it keeps some non-threadsafe components from asploding but can be confusing and frustrating if you're looking for true multithreading.
There are some implementations of Python that don't use a GIL, such as stackless, if you're looking for true multithreading.