【问题标题】:Python shared file access between threadsPython 线程间共享文件访问
【发布时间】:2013-04-10 22:56:50
【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

    标签: python multithreading python-2.7


    【解决方案1】:

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

    另一种方法是 mmap,但我使用它还不够了解问题。

    【讨论】:

      猜你喜欢
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-12
      • 1970-01-01
      • 1970-01-01
      • 2017-01-20
      • 2011-03-10
      相关资源
      最近更新 更多