Hol ihn von der Event Loop runter. Wickle den blockierenden Aufruf in asyncio.to_thread oder nutz run_in_executor mit einem Thread-Pool, damit die Loop frei bleibt, um andere Requests zu bedienen. Ist die Arbeit CPU-lastig, schick sie stattdessen in einen Process-Pool oder an einen Background-Worker wie Celery. Bleibt sie inline, legt ein langsamer Aufruf jeden anderen Request auf diesem Worker lahm.
Warum Interviewer das fragen
Die Loop zu blockieren ist der prägende async-Fehler, und er produziert die übelste Sorte Ausfall: Latenz, die im Test gut aussieht und unter Last zusammenbricht. Der Interviewer will den Beleg, dass du kooperatives Scheduling verstehst, dass nichts eine Coroutine unterbricht, und dass du weißt, dass FastAPI einfache def-Endpunkte ohnehin in einem Threadpool ausführt, was oft die einfachste richtige Antwort ist.
So baust du deine Antwort auf
- Erklär, warum das Blockieren der Loop fatal ist.
- Bring to_thread oder einen Executor für I/O.
- Leite CPU-lastige Arbeit an Prozesse oder eine Queue.
- Erwähn die Option eines einfachen def-Endpunkts in FastAPI.
Beispielantwort
Der Grund, warum es zählt, ist, dass asyncio kooperativ und single-threaded ist, eine Coroutine also die Loop behält, bis sie auf etwas awaitet. Ein blockierender Treiberaufruf in einem async Handler friert jeden anderen laufenden Request auf diesem Worker ein, und bei geringem Traffic merkst du das nie. Der billigste Fix in FastAPI ist, den Endpunkt mit einfachem def statt async def zu definieren, dann führt das Framework ihn für dich in seinem Threadpool aus. Wenn ich es innerhalb einer async-Funktion brauche, wickelt asyncio.to_thread den Aufruf und awaitet das Ergebnis. Vorsichtig bin ich bei der Größe des Thread-Pools, denn der Default ist klein und eine langsame Abhängigkeit staut sich dahinter, also dimensioniere ich ihn gegen die erwartete Nebenläufigkeit und setze ein Timeout. Für alles CPU-Schwere helfen Threads unter dem Default-Build nicht, das geht also in einen Process-Pool oder raus an einen Celery-Worker. Wir haben so einen Fall mit einem alten SOAP-Client erwischt, der acht Sekunden brauchte, und die p99-Latenz eines ganzen Service ist diesem einen Aufruf gefolgt.
Steht dieses Vorstellungsgespräch bald an? GhostPilot hört bei deinem Live-Call mit, erkennt die Frage in dem Moment, in dem sie gestellt wird, und bringt dir eine strukturierte Antwort in Echtzeit auf den Bildschirm. Probier es im nächsten Mock aus, oder hol dir einen $29 Session Pass, kein Abo, für den Ernstfall.
So funktioniert esNachfragen, mit denen du rechnen solltest
- Wie würdest du eine blockierte Loop in Produktion erkennen?
- Was meldet der asyncio Debug Mode?
- Ist ein synchroner Datenbanktreiber dort je akzeptabel?
Weitere Fragen für Python-Entwickler
Dein Interviewer stellt seine eigene Version davon. Kopier deine echte Stellenbeschreibung in den kostenlosen Question Predictor und bekomm die 20 Fragen, die diese Rolle am wahrscheinlichsten stellt, samt dem, worauf jede wirklich abzielt.
Meine Fragen vorhersagen