I found that in Python 3.4 there are few different libraries for multiprocessing/threading: multiprocessing vs threading vs asyncio.
But I don't know which one to use or is the "recommended one". Do they do the same thing, or are different? If so, which one is used for what? I want to write a program that uses multicores in my computer. But I don't know which library I should learn.
This is the basic idea:
So basically stick to threading unless you have IO/CPU problems.
[Quick Answer]
TL;DR
Making the Right Choice:
Reference
[NOTE]:
asyncio
event loop (uvloop makesasyncio
2-4x faster).[UPDATE (2019)]:
They are intended for (slightly) different purposes and/or requirements. CPython (a typical, mainline Python implementation) still has the global interpreter lock so a multi-threaded application (a standard way to implement parallel processing nowadays) is suboptimal. That's why
multiprocessing
may be preferred overthreading
. But not every problem may be effectively split into [almost independent] pieces, so there may be a need in heavy interprocess communications. That's whymultiprocessing
may not be preferred overthreading
in general.asyncio
(this technique is available not only in Python, other languages and/or frameworks also have it, e.g. Boost.ASIO) is a method to effectively handle a lot of I/O operations from many simultaneous sources w/o need of parallel code execution. So it's just a solution (a good one indeed!) for a particular task, not for parallel processing in general.