Concurrency models in Python include multiple processes, multiple threads, and asynchronous cooperative multitasking. Multiple processes have separate memory and context by default while threads share memory and context. Asynchronous programming submits time-consuming requests and gets called back when done, typically running in a single OS thread. It can have better execution time than multi-threading for I/O-bound workloads. The document recommends using asynchronous programming with libraries like AsyncIO for I/O-bound work, and multiprocessing for mostly native code.