Python:当多个进程同时写入“搁置”时需要担心什么?

Ana*_*ari 7 python concurrency shelve

对于我的 python 应用程序,我正在考虑使用标准库的一部分shelve。将有数百个进程,每个进程向同一个搁置对象写入一些内容。写作总是将一个新的键值对添加到货架上。键是唯一的,所以没有两个进程会更新同一个条目。

在这种情况下会出现什么问题?

mha*_*wke 5

货架文档是明确这一点。

搁置模块不支持对搁置对象的并发读/写访问。(多个同时读访问是安全的。)当一个程序有一个为写打开的架子时,其他程序不应该打开它进行读或写。Unix 文件锁定可用于解决此问题,但这因 Unix 版本而异,并且需要了解所使用的数据库实现。

所以,如果没有进程同步,我就不会这样做。

进程是如何启动的?如果它们是由主进程创建的,那么您可以查看多处理模块。使用队列到子进程写回他们的成果,并有从队列中删除主项目,并将其写入到货架。此类示例位于/sf/answers/1715100621/

如果你没有进程层次,那么你就需要使用锁定到控制读在货架文件的写权限。如果您使用的是 Linux 或类似软件,您可能会使用名为 semaphore 的posix_ipc

另一个明显的选择是使用数据库服务器 - Postgresql 或类似的。