2018/11/09

[Python] mmap.flush で OSError が出る場合、アラインメントが不適切な可能性あり

Python の mmapflush() を実行することで変更をディスクに保存します。

この flush([offset[, size]]) を引数つきで呼ぶときは 「offsetmmap.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

最初、このエラーが発生した時、指定した範囲が不正なんじゃないか等、無駄に調べてしまいました…

  1. エラーメッセージにその旨出して欲しい 
?

0 件のコメント: