That really depends on your requirements. If you need multithreading (not multiprocessing), you cannot use Python.
That really depends on your requirements. If you need multithreading (not multiprocessing), you cannot use Python.
About to show my ignorance, but when is multithreading useful when multiprocessing is not? Assuming it is a use case that is suited for a high level dynamic language to begin with.
That kind of sounds like you're nitpicking over an implementation detail. Which brings me back to my original confusion. If I have an interface that allows me to articulate concurrent tasks, I don't see the difference between threads, processes, or separate machines.
Again, this is assuming we're not in a resource constrained environment, and we're not doing something so processor heavy that it really should be compiled.
Python threads are real threads, and things like blocking socket IO does not block Python execution in other threads.
This only matters for performance-critical applications.
If you need multithreading of Python code for parallelism, you cannot use CPython (and, consequently, can't use Python 3.)
Both IronPython and Jython use native threads without a GIL.