【发布时间】:2015-03-17 12:19:31
【问题描述】:
我有许多文件,映射到内存(作为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 个副本(在我的情况下会消耗太多内存)之外,有没有办法绕过这个问题?
【问题讨论】:
标签: python multithreading mmap