<p>我有很多文件,映射到内存(作为<code>mmap</code>对象)。在处理过程中,每个文件必须打开几次。如果只有一条线,它工作得很好。但是,当我尝试并行运行任务时,出现了一个问题:不同的线程不能同时访问同一个文件。此示例说明了问题:</p>
<pre><code>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.<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>(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!')
</code></pre>
<p>每当我运行这个脚本时,我会收到大约20条错误消息。在</p>
<p>有没有一种方法可以避免这个问题,除了为每个文件制作64个副本(在我的例子中这会消耗太多内存)?在</p>