2018/11/09
[Python] mmap.flush で OSError が出る場合、アラインメントが不適切な可能性あり
Python の [mmap](https://docs.python.jp/3/library/mmap.html) は `flush()` を実行することで変更をディスクに保存します。
この `flush([offset[, size]])` を引数つきで呼ぶときは 「`offset` が `mmap.ALLOCATIONGRANULARITY` の倍数でないといけない」という制約があります
。
つまり、以下のように、`offset` の位置を調整しないといけません。
```python
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](https://bugs.python.org/issue32798)
`offset` の調整をしないと、`OSError` が発生してしまいます。
```
OSError: [Errno 22] Invalid argument
```
最初、このエラーが発生した時、指定した範囲が不正なんじゃないか等、無駄に調べてしまいました…
0 件のコメント:
コメントを投稿