如果同时进行读/写访问,将会发生什么?

时间:2019-01-10 11:19:34

标签: python zarr

zarr tutorial中这样写:

  

Zarr阵列尚未设计用于多个读写器同时在同一阵列上运行的情况。

如果发生的话会发生什么?会崩溃吗?未定义的行为?会慢还是效率低?

编辑: 支持多位作者和多位读者:

  

通过数据源,我们的意思是可能会发生多个并发读取操作。数据接收器是指可能发生多个并发写入操作,每个写入器更新数组的不同区域

示例:

synchronizer = zarr.ProcessSynchronizer('data/example.sync') z = zarr.open_array(..., synchronizer=synchronizer)

1 个答案:

答案 0 :(得分:0)

根据自己的文档,默认行为是不同步。

因此,它不会很慢/效率很低-如果您确实已同步并且工作人员必须等待其他工作人员释放资源,然后再继续操作,就会发生这种情况。

它也不会崩溃,至少在没有第三方干预的情况下-没有任何限制访问权限,并且我推断没有针对这种可能设计导致错误的情况进行运行时检查。

未定义?不太完全,但是我们越来越近了。假设默认情况下确实没有检查或锁定,那么您将获得的是一种竞争条件,即,如果您的Writer首先访问您的数据,那么尝试第二次读取它的Reader只会看到Writer写入的内容。

相反,如果您的阅读器首先获取其肮脏的小IO,它将在由Writer覆盖之前先读取原始数据。而且,如果您有两个Writer,则以较晚者为准将确定数据的最终形状。

> 2位读者/作家同样持有;我将弄清楚所产生的混乱的细节,作为练习。