3 ms·
Concurrency in Python is a weird topic, since multiprocessing is the only "real" concurrency. Threading is "implicit" context switching all in the same process/
by sgtlaggy 4y ago
Concurrency in Python is a weird topic, since multiprocessing is the only "real" concurrency. Threading is "implicit" context switching all in the same process/thread, asyncio is "explicit" context switching.
On top of that, you also have the complication of the GIL. If threads don't release the GIL, then you can't effectively switch contexts.
- dragonwriter 4y ago> Concurrency in Python is a weird topic, since multiprocessing is the only "real" concurrency. You are confusing concurrency and parallelism. > Threading is "implicit" context switching all in the same process/thread No, threading is separate native threads but with a lock that prevents execution of Python code in separate threads simultaneously (native code in separate threads, with at most on running Python, can still work.)
- hn_saver 4y agoThreading IS concurrency. When you say "real" concurrency, you actually mean parallelism.
- bornfreddy 4y agoNot in CPython it isn't. Threading in CPython doesn't allow 2 threads to run concurrently (because of GIL). As GP correctly stated, you need multiprocessing (in CPython) for concurrency.
- bulatb 4y agoThey're emphasizing a precise distinction between "concurrent" (the way it's structured) and "parallel" (the way it runs). Concurrent programs have multiple right answers for "Which line of computation can make progress?" Sequential execution picks one step from one of them and runs it, then another, and so on, until everything is done. Whichever step is chosen from whichever computation, it's one step per moment in time; concurrency is only the ability to choose. Parallel execution of concurrent code picks steps from two or more computations and runs them at once. Because of the GIL, Python on CPython has concurrency but limited parallelism.
- dragonwriter 4y ago> Threading in CPython doesn't allow 2 threads to run concurrently (because of GIL) It does allow threads to execute concurrently. It doesn't allow them to execute in parallel if they all are running Python code (if at least one is rubbing native code and has released the GIL, then those plus one that has not can run in parallel.)