At the programming model level, the two relevant competitors are preemptive multi-threading and cooperative multi-threading.
The concurrent.futures API in Python 3.2+ is built around preemptive multi-threading. There are no explicit switch points, you write your code assuming blocking calls, and if data is shared between threads, you need to use explicit locking to preserve data integrity.