m__golbs hat geschrieben: Donnerstag 23. Juli 2026, 13:34
nutze, das Dateiende aber nicht gefunden wird, ewig läuft.
Das kann eigentlich nicht passieren. Sobald du das Dateiende erreichst, wird
StopIteration ausgelöst, was die For-Schleife beendet.
Angenommen ein anderer Prozess schreibt kontinuierlich Daten in die Datei und der Python-Prozess liest kontinuierlich, sollte er irgendwann so weit sein, dass er das Ende der Datei erreicht, bevor der andere Prozess die nächsten Daten geschrieben hat.
Dann gibt es noch Pseudo-Dateien, die kein Ende haben: /dev/random, /dev/zero, /dev/urandom
Das läuft unendlich lang:
Code: Alles auswählen
with open("/dev/zero", "rb") as fd:
buffer = bytearray(1024)
while size := fd.readinto(buffer):
pass
Jetzt das
⚠ gefährliche ⚠ Beispiel,
dass ziemlich schnell den RAM füllt:
Code: Alles auswählen
with open("/dev/zero", "rb") as fd:
for line in fd:
pass
Der Grund ist ein ganz einfacher. Die Pseudo-Datei /dev/zero liefert durchgehend 0-Bytes. Der iterator von fd konsumiert so lange Daten (die im RAM landen), bis das Zeilenende b"\n" gefunden worden ist. Da bei dieser speziellen Pseudo-Datei niemals ein Zeilenende vorkommt, läuft der RAM voll. Er erreicht auch niemals das Statement pass, da der Iterator von fd damit beschäftigt ist, den RAM zu füllen.
PS: Ich beziehe mich hier ausschließlich auf Linux.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server