Interviewfrage für Python-Entwickler

Wann greifst du zu Threads, wann zu Prozessen, wann zu asyncio?

Worauf der Interviewer abzielt, wie du deine Antwort aufbaust und ein gesprochenes Beispiel zum Anpassen.

Kurzantwort

Nimm asyncio für I/O in großem Volumen, wo du tausende gleichzeitige Wartezustände in einem Thread willst, Threads für I/O-Arbeit, für die es nur blockierende Libraries gibt, und Prozesse für CPU-lastige Arbeit, die echte Kerne braucht. Die entscheidenden Fragen sind, ob die Arbeit wartet oder rechnet, und ob die Libraries, von denen du abhängst, ein async-Interface anbieten.

Warum Interviewer das fragen

Bei Nebenläufigkeitsentscheidungen verbrennen Junior-Engineers Wochen. Der Interviewer will eine Entscheidungsregel statt einer Vorliebe, dazu Bewusstsein für die Kosten jedes Modells: Prozessspeicher und Serialisierungs-Overhead, Thread-Sicherheit und Context Switching, und die Tatsache, dass ein unachtsamer blockierender Aufruf eine ganze Event Loop lahmlegt. Zu erwähnen, dass sich das kombinieren lässt, etwa ein Thread-Pool-Executor innerhalb von asyncio, zeigt Praxiserfahrung.

So baust du deine Antwort auf

  • Teil das Problem zuerst in Warten gegen Rechnen.
  • Ordne jeder Kategorie ein Nebenläufigkeitsmodell zu.
  • Nenn eine Kostenseite pro Wahl.
  • Gib ein konkretes Beispiel aus deiner eigenen Arbeit.

Beispielantwort

Gesprochenes Beispiel, erste Person

Meine erste Frage ist immer, ob die Arbeit wartet oder ob sie rechnet, weil diese Antwort das Werkzeug bestimmt. Warten auf Netzwerk oder Platte heißt asyncio, sofern die Client-Libraries es unterstützen, denn eine Event Loop hält problemlos zehntausend offene Sockets auf einem Kern und der Speicher pro Task ist winzig. Wenn der einzige verfügbare Treiber blockierend ist, nehme ich einen Thread-Pool, weil ein Thread, der in einem Socket-Read parkt, das Lock freigibt und praktisch nichts kostet. Rechnen heißt Prozesse, oder der Sprung in eine native Library, die das Lock selbst freigibt. In einem Service, an dem ich gearbeitet habe, hatten wir beides in einem Request-Pfad: einen async Handler, der mit gather auf sechs interne APIs auffächert, und einen run_in_executor-Aufruf um ein altes blockierendes SDK, das wir nicht ersetzen konnten. Diese Kombination lohnt sich im Interview zu nennen, weil die meisten echten Systeme gemischt sind. Der Fehler, auf den ich achte, ist, wenn jemand eine schwere pandas-Transformation in eine Coroutine packt, denn dann bedient die Loop während der Laufzeit nichts anderes mehr.

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 es

Nachfragen, mit denen du rechnen solltest

  • Was geht als Erstes kaputt, wenn du einen Thread-Pool hochskalierst?
  • Wie teilst du Zustand zwischen Prozessen?
  • Wo passt eine Task Group in dieses Bild?

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

Üb die harten Fragen, bevor sie gestellt werden

Trainier mit einem Live-Copiloten und geh dann vorbereitet rein. Ein $29 Session Pass bringt dich durch das Vorstellungsgespräch, ohne Abo und ohne Bindung.

GhostPilot holen