Могу объяснить на практике, для чего они нужны.
Допустим, вам необходимо скачать несколько файлов с сайта. Если делать это обычным методом, то они будут скачиваться по-очереди, т.е 1 -> 2 -> 3 и т.д. Но с помощью потоков можно распараллелить этот процесс
См. пример ниже:
from threading import Thread
url = ["https://test.com/23123", "https://test.com/2343" ...]
def download(url):
file = requests.get(url)
with open("photo.jpg", "wb") as f:
f.write(file.content)
for i in url:
Thread(target=download, args=(i,)).start()