2018/11/09
[Python] mmap.flush で OSError が出る場合、アラインメントが不適切な可能性あり
Python の mmap は flush()
を実行することで変更をディスクに保存します。
この flush([offset[, size]])
を引数つきで呼ぶときは 「offset
が mmap.ALLOCATIONGRANULARITY
の倍数でないといけない」という制約があります1。
つまり、以下のように、offset
の位置を調整しないといけません。
1 2 | aligned_offset = int (offset / mmap.ALLOCATIONGRANULARITY) * mmap.ALLOCATIONGRANULARITY mm.flush(aligned_offset, offset - aligned_offset + size) |
参考
Issue 32798: mmap.flush() on Linux does not accept the "offset" and "size" args - Python tracker
offset
の調整をしないと、OSError
が発生してしまいます。
OSError: [Errno 22] Invalid argument
最初、このエラーが発生した時、指定した範囲が不正なんじゃないか等、無駄に調べてしまいました…
0 件のコメント:
コメントを投稿