我有一个线程定期写入文件(writeThread)和另一个(readThread)异步读取文件。 readThread可以使用不同的句柄访问文件而不会弄乱任何东西吗?
如果没有,python是否有一个可以被writeThread使用但不阻止readThread的共享锁?我不喜欢简单的非共享锁,因为文件访问需要一毫秒的顺序,而writeThread的写周期是相同的顺序(周期取决于一些外部参数)。因此,可能会出现这样的情况:即使writeThread可能释放锁定,它也会立即重新获取它,从而导致饥饿。
我能想到的一个解决方案是维护文件的多个副本,一个用于阅读,另一个用于写入,并避免整个情况。但是,涉及的文件大小可能会变得很大,因此这种方法不可取。
还有其他替代方案或这是一个糟糕的设计吗?
由于
答案 0 :(得分:0)
是的,您可以多次打开该文件并获得对该文件的独立访问权限。每个文件对象都有自己的缓冲区和位置,因此例如对一个文件对象的搜索不会弄乱另一个文件对象。它的工作方式与多程序访问非常相似,在读/写文件的同一区域时必须小心。例如,在写入对象刷新之前,读取器将不会看到附加到文件末尾的写入。在读者和作者都冲洗之前,读者不会看到现有数据的重写。写入不是原子的,因此如果您正在编写记录,读者可能会看到部分记录。 async在阅读器上选择或轮询事件可能很时髦......不确定那个。
另一种选择是mmap,但我还没有充分利用它来了解陷阱。