gpt4 book ai didi

python - ZODB 中的冲突解决

转载 作者:太空宇宙 更新时间:2023-11-04 06:21:11 24 4
gpt4 key购买 nike

我确实在我的 ZODB 上运行并行写入请求。我的 ZODB 中确实有多个 BTree 实例。一旦服务器访问了这样的 BTree 中的相同对象,我就得到了 IOBucket 类的 ConflictError。对于我所有的 Django 基类,我确实设置了 _p_resolveconflict,但无法为 IOBucket 实现它,因为它是基于 C 的类。

我做了更深入的分析,但仍然不明白为什么它会提示 IOBucket 类以及它向其中写入的内容。此外,解决它的正确策略是什么?

非常感谢您的帮助!

最佳答案

IOBucketBTree 持久化结构的一部分;它的存在是为了尝试减少冲突错误,并且确实会尽可能地尝试解决冲突。

也就是说,冲突并不总是可以避免的,您应该重新开始您的事务。例如,在 Zope 中,如果出现 ConflictError,整个请求最多会重新运行 5 次。冲突是 ZODB 处理两个不同的请求试图更改完全相同的数据结构的情况(希望很少见)的方式。

重新启动您的事务意味着调用 transaction.begin() 并再次应用相同的更改。 .begin() 将获取其他进程所做的任何更改,您的提交将基于新数据。

关于python - ZODB 中的冲突解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11991114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com