[Python-de] Zeilengepuffertes r/w

Thomas Rachel nutznetz-0c1b6768-bfa9-48d5-a470-7603bd3aa915 at spamschutz.glglgl.de
Di Aug 30 19:43:53 CEST 2011


Am 30.08.2011 17:06 schrieb Ole Streicher:

> Mit readline klappt es problemlos, danke.
>
> Etwas überraschend, dass der Zeileniterator anders als readline
> funktioniert. Warum ist das so?

Genau weiß ichs auch nicht, aber es hat wohl mit dem internen Buffering 
zu tun. Der Standard-Iterator (SI) scheint grundsätzlich seine volle 
Blockgröße lesen zu wollen, readline (rl) hingegen nur so viel, wie es 
grad bekommt.

Will sagen:

SI ruft so was auf wie fileobject.read(X), welches intern nach 
Möglichkeit versucht, X Bytes zu lesen, und verarbeitet dann erst 
weiter. Erst wenn ein EOF kommt, wird der Versuch abgebrochen.

rl ruft eher so was wie os.read(fileobject.fileno(), X) auf. Da kommen 
bis zu X Bytes raus, wenn aber gerade weniger da sind, eben nur die. Und 
die werden dann auch gleich weiterverarbeitet. Daher reagiert es schneller.

Warum dieser Unterschied gemacht wird, weiß ich auch nicht.


Thomas


Mehr Informationen über die Mailingliste python-de