[pypy-issue] Issue #2614: Differences in buffering of stdin between CPython and PyPy (pypy/pypy)

realead issues-reply at bitbucket.org
Sat Jul 22 16:51:48 EDT 2017


New issue 2614: Differences in buffering of stdin between CPython and PyPy
https://bitbucket.org/pypy/pypy/issues/2614/differences-in-buffering-of-stdin-between

realead:

The man pages of CPython say the following about option `-u`:

-u Force stdin, stdout and stderr to be totally unbuffered. ...  Note that there is internal buffering in xread‐ lines(), readlines() and file-object iterators ("for line in sys.stdin") which is not influenced by this option. 

So if we read from `sys.stdin` with help of file-object iterator, we can see/feel the buffering even if python was called with options `-u`.

However, for pypy we can see, that if started with option `-u` the reading from `sys.stdin`  with help of file-object iterator becomes slower. 

Admittedly,  pypy man pages don't say, that `sys.sdin` stays buffered for `-u`, but this is still a difference from the behavior of CPython.

To reproduce:

First step: create a large input file by running the following script: 

```
#!python

#create_data.py
for i in xrange(10**6):
  print 10**9
```
 via `python create_data.py > input.in`.

Second step: run the following script to see the difference of running times:
```
#!python

#read_it.py
import sys
ans = 0    
for line in sys.stdin:
    if int(line)%k == 0:
        ans += 1
print(ans)
```
with `pypy read_it.py < input.in` and `pypy -u read_it.py < input.in`




More information about the pypy-issue mailing list