我如何使Python的mmap分配原子化?这里没有提到原子性:https://docs.python.org/3.0/library/mmap.html。
huge_list1 = [888 for _ in range(100000000)]
huge_list2 = [9999 for _ in huge_list1]
b1 = struct.pack("100000000I", *huge_list1)
b2 = struct.pack("100000000I", *huge_list1)
f = open('mmp', 'wb')
f.write(b1)
f.close()
f = open('mmp', 'r+')
m = mmap.mmap(f.fileno(), 0)
m[:]=b2
我立即在另一个进程中执行以下代码
f = open('mmp', 'r')
m = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
mm = m[:]
l = struct.unpack("100000000I", mm)
set(l)
我看到的是{888, 9999}
这意味着mmap不是原子操作。有没有办法使它变成原子操作?
b2
的赋值应该是:b2 = struct.pack("100000000I", *huge_list2)
,按照目前的方式,9999
不可能以任何情况写入文件。 - zwer