我有许多文件,被映射到内存(作为mmap
对象)。在处理过程中,每个文件必须被打开多次。如果只有一个线程,这样做是可以的。但是,当我尝试并行运行任务时,出现了问题:不同的线程无法同时访问同一文件。以下示例说明了问题:
import mmap, threading
class MmapReading(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
for i in range(10000):
content = mmap_object.read().decode('utf-8')
mmap_object.seek(0)
if not content:
print('Error while reading mmap object')
with open('my_dummy_file.txt', 'w') as f:
f.write('Hello world')
with open('my_dummy_file.txt', 'r') as f:
mmap_object = mmap.mmap(f.fileno(), 0, prot = mmap.PROT_READ)
threads = []
for i in range(64):
threads.append(MmapReading())
threads[i].daemon = True
threads[i].start()
for thread in threading.enumerate():
if thread != threading.current_thread():
thread.join()
print('Mmap reading testing done!')
每次运行这个脚本时,我都会收到大约20个错误消息。 除了制作每个文件的64个副本(在我的情况下会消耗太多内存),是否有其他解决问题的方法?