在普通代码中,一切都很好,我可以正确读/写。
for i in range(10):
sleep(1)
m = mmap.mmap(-1, 1024, access=mmap.ACCESS_WRITE, tagname='share_mmap')
m.seek(0)
cnt = m.read_byte()
if cnt == 0:
print("Load data to memory")
m.seek(0)
m.write(b"FFFFFFFFFFFFFFFFFF")
else:
m.seek(0)
info_str=m.read().translate(None, b'\x00').decode()
print("The data is in memory: ", info_str)
结果:
> Load data to memory
> The data is in memory: FFFFFFFFFFFFFFFFFF
> The data is in memory: FFFFFFFFFFFFFFFFFF
但是如果我用 包装它contextlib,就像所有教程的代码一样,那么我就无法再阅读了。
for i in range(10):
sleep(1)
# !!!! LOOK AT HERE !!!! I only changed this line.
with contextlib.closing(mmap.mmap(-1, 1024, access=mmap.ACCESS_WRITE,
tagname='share_mmap')) as m:
m.seek(0)
cnt = m.read_byte()
if cnt == 0:
print("Load data to memory")
m.seek(0)
m.write(b"FFFFFFFFFFFFFFFFFF")
else:
m.seek(0)
info_str=m.read().translate(None, b'\x00').decode()
print("The data is in memory: ", info_str)
结果:
> Load data to memory
> Load data to memory
> Load data to memory
为什么? 还有,为什么大家都喜欢这样——他们没有遇到过这个bug吗?