Message357927
Paul's solution works in 3.7 if you set the buffer size to zero when calling fdopen.
fd = os.open("my_file", os.O_DIRECT | os.O_RDWR)
f = os.fdopen(fd, "rb+", 0)
m = mmap.mmap(-1, 4096)
f.readinto(m)
This is according to a comment in _pyio.py:
# If remaining space in callers buffer is larger than
# internal buffer, read directly into callers buffer
So by simply disabling the buffer (which is what we'd want for O_DIRECT anyway) readinto() works as expected.
However, based on this issue, I'm a little concerned this won't be fully supported by python going forward; so use with care. |
|
Date |
User |
Action |
Args |
2019-12-06 17:31:25 | logang | set | recipients:
+ logang, exarkun, pitrou, aguiar, Michael Mol, yoyoyopcp |
2019-12-06 17:31:25 | logang | set | messageid: <1575653485.64.0.374385626784.issue5396@roundup.psfhosted.org> |
2019-12-06 17:31:25 | logang | link | issue5396 messages |
2019-12-06 17:31:25 | logang | create | |
|