How do I choose what concurrent execution library to use?

This is an interesting and timely discussion.

Dot Net has this page Parallel programming in .NET: A guide to the documentation. It describes why parallel processing is useful, what tools dot Net provides, and why to choose each.

Does python have something similar? I can find docs for concurrent.futures, multiprocessing, threading. These dive straight into the usage and details, with only a little overview. Why would I choose one over another?

For free threading, there will be even more choice. For Python, specifically, how would I choose which direction to take for my requirements?

I use concurrent.futures solely because Futures are awaitable, making them suitable for use in asynchronous code.

same question)