2016-10-06 2 views
0

Frage: liest jeder Thread jede Zeile nur einmal aus der Datei oben oder gibt es Chancen, dass ein bestimmter Thread am Ende eine Zeile zweimal lesen kann?Multithreaded-Datei lesen Python

Mein Verständnis war, dass ein später gestarteter Thread das Datei-Handle für den früher gestarteten Thread überschreibt, was dazu führt, dass der frühere Thread einige Zeilen zweimal oder dreimal oder öfter liest.

Als ich diesen Code ausführte, war das Ergebnis anders als erwartet.

Alle Erklärungen sind willkommen.

+1

Was war das Ergebnis, als Sie das Programm ausgeführt haben? Hast du irgendwelche Dämonen bemerkt, die aus deiner Nase fliegen? :) –

Antwort

7

Jeder Thread führt Ihre Funktion unabhängig; Jede Kopie der Funktion öffnet die Datei als lokale Datei, die nicht freigegeben ist. Jedes Python-Dateiobjekt verfolgt den Lesestatus vollständig unabhängig voneinander; Jeder hat hier sein eigenes Dateihandle auf Betriebssystemebene.

Also nein, wenn nichts anderes den Inhalt der Datei zu verändern, wird jeder Thread jede Zeile sieht nur einmal, genauso wie wenn getrennte Prozesse versucht, die Datei zu lesen.

+0

Aber warum führt jeder Thread die Funktion unabhängig aus? Es ist das gleiche Funktionsobjekt, das an jeden Thread übergeben wird. Wie kann also jeder Thread die Datei als lokal öffnen? – abc

+3

@abc: Ja, Sie übergeben eine Funktion * Objekt *. So wird ein Thread gestartet und * auf diesem Thread * wird die Funktion * tatsächlich * genannt. Wenn eine Funktion aufgerufen wird, erstellt sie einen neuen Rahmen mit ihrer eigenen lokalen Struktur. Jeder Thread ruft die Funktion separat auf, jeder Thread erhält seinen eigenen Funktionsrahmen und jeder Funktionsrahmen hat Einheimische. Diese Einheimischen sind völlig unabhängig. –