Python:当多个进程同时写入"shelve"时要担心什么?



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

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

shelve文档对此有明确说明。

shelve模块不支持并发读写访问搁置对象。(多个同时读访问是安全的。)当一个程序有一个开放的架子供写入,其他程序不应该有它可以打开来读或写。Unix文件锁定可以用来解决但是这在不同的Unix版本中是不同的,并且需要相关知识关于使用的数据库实现。

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

进程是如何启动的?如果它们是由主进程创建的,那么您可以查看多处理模块。使用一个队列,子进程向其回写结果,并让主进程从队列中删除项目并将其写入架子。例如:https://stackoverflow.com/a/24501437/21945.

如果你没有进程层次结构,那么你需要使用锁来控制读对架子文件的写访问。如果您使用的是Linux或类似的操作系统,则可以使用posix_ipc命名信号量。

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

在您的情况下,您可能会有更好的运气使用更强大的kvp存储,如redis。设置本地redis服务或远程redis服务(例如在AWS的ElastiCache服务上)非常容易

最新更新