在zarr tutorial中这样写:
Zarr阵列尚未设计用于多个读写器同时在同一阵列上运行的情况。
如果发生的话会发生什么?会崩溃吗?未定义的行为?会慢还是效率低?
编辑: 支持多位作者和多位读者:
通过数据源,我们的意思是可能会发生多个并发读取操作。数据接收器是指可能发生多个并发写入操作,每个写入器更新数组的不同区域
示例:
synchronizer = zarr.ProcessSynchronizer('data/example.sync')
z = zarr.open_array(..., synchronizer=synchronizer)
答案 0 :(得分:0)
根据自己的文档,默认行为是不同步。
因此,它不会很慢/效率很低-如果您确实已同步并且工作人员必须等待其他工作人员释放资源,然后再继续操作,就会发生这种情况。
它也不会崩溃,至少在没有第三方干预的情况下-没有任何限制访问权限,并且我推断没有针对这种可能设计导致错误的情况进行运行时检查。
未定义?不太完全,但是我们越来越近了。假设默认情况下确实没有检查或锁定,那么您将获得的是一种竞争条件,即,如果您的Writer首先访问您的数据,那么尝试第二次读取它的Reader只会看到Writer写入的内容。
相反,如果您的阅读器首先获取其肮脏的小IO,它将在由Writer覆盖之前先读取原始数据。而且,如果您有两个Writer,则以较晚者为准将确定数据的最终形状。
> 2位读者/作家同样持有;我将弄清楚所产生的混乱的细节,作为练习。