对于我的python应用程序,我正在考虑使用shelve,它是标准库的一部分。将有数百个进程,每个进程都写入同一个搁架对象。写作将始终是为搁置添加一个新的键值对。密钥是唯一的,因此没有两个进程会更新相同的条目。
在这种情况下会出现什么问题?
答案 0 :(得分:1)
shelve documentation对此非常明确。
shelve模块不支持并发读/写访问 搁置的物体。 (多个同时读取访问是安全的。)何时 一个程序有一个可以写作的架子,没有其他程序应该有 它可供阅读或写作。 Unix文件锁定可以用来解决 这,但这在Unix版本中有所不同,需要知识 关于使用的数据库实现。
因此,如果没有进程同步,我就不会这样做。
流程是如何开始的?如果它们是由主进程创建的,那么您可以查看multiprocessing模块。使用子进程写回的结果Queue,让主服务器从队列中删除项目并将其写入工具架。此类示例位于https://stackoverflow.com/a/24501437/21945。
如果您没有进程层次结构,那么您需要使用锁定来控制对架文件的读取和写入权限。如果您使用的是Linux或类似的,则可以使用名为semaphore的posix_ipc。
另一个明显的选择是使用数据库服务器 - Postgresql或类似的。
答案 1 :(得分:0)
在你的情况下,你可能会有更好的运气使用更强大的kvp商店,比如redis。设置本地redis服务或远程redis服务(例如在AWS的ElastiCache服务上)非常简单