welches Problem wird durch asynchrones Programmieren gelöst?
Das ist im Endeffekt kooperatives Multitasking auf Ebene des Python-Interpreters - einen Vorteil hast du damit, wenn ein Programm Dinge, die es erfordern auf eine Reaktion von Außen zu warten (also i.d.R. warten auf I/O - z.B. der Nutzer soll eine Taste drücken, ein HTTP-Client hält eine Verbindung, aber schickt gerade keine Anfragen, du willst Dateien von verschiedenen Servern herunterladen und das, was zuerst ankommt verarbeiten usw.), unterbrechen kann und in der Zwischenzeit etwas anderes machen kann.
Ich fand den Vortrag von David Beazley Build Your Own Async sehr hilfreich, um das Konzept in seinen Grundzügen zu verstehen.