0

我有一个线程定期写入文件(writeThread),另一个线程(readThread)从文件中异步读取。readThread 可以使用不同的句柄访问文件而不弄乱任何东西吗?

如果没有,python是否有一个可以被 writeThread 使用但不阻塞 readThread 的共享锁?我不喜欢简单的非共享锁,因为文件访问需要一毫秒的顺序,并且 writeThread 写入周期是相同的顺序(周期取决于一些外部参数)。因此,可能会出现这样一种情况,即使 writeThread 可以释放锁,它也会立即重新获取它,从而导致饥饿。

我能想到的一个解决方案是维护文件的多个副本,一个用于读取,另一个用于写入,并一起避免整个情况。但是,所涉及的文件大小可能会变得很大,因此这种方法并不可取。

有没有其他选择或者这是一个糟糕的设计?

谢谢

4

1 回答 1

0

是的,您可以多次打开该文件并获得对它的独立访问权限。每个文件对象都有自己的缓冲区和位置,因此例如对一个文件对象的搜索不会弄乱另一个文件对象。它的工作原理很像多程序访问,在读取/写入文件的同一区域时必须小心。例如,在写入对象刷新之前,读取器不会看到附加到文件末尾的写入。在读写器刷新之前,读者不会看到对现有数据的重写。写入不会是原子的,因此如果您正在写入记录,读者可能会看到部分记录。阅读器上的异步选择或轮询事件可能很时髦......不确定那个。

另一种方法是 mmap,但我没有使用它来了解问题。

于 2013-04-11T03:27:59.013 回答