Python:网络文件的并发访问(读/写)
我正在用Python(我用的是3.4版本)创建一个程序,这个程序会在最多20台机器上同时运行,它们都连接在同一个网络上。这些机器不时需要访问网络,进行一些操作(比如创建、删除或修改文件)……
我目前的计划是:
- 网络上会有一个名为“db”的文件夹。
- 我打算使用shelve模块来存储共享数据(一个简单的字典,里面有不到3000条记录,包含一些路径名和日志信息),这个文件夹里会放这些数据。因为数据量不大,所以这个模块使用起来方便,速度也足够快。
- 为了避免多台机器同时在网络上进行操作(以免发生冲突),机器在进行任何操作之前都需要先锁定网络上的shelve文件(反正它们也需要更新这个文件),并且在操作结束后才会解锁(如果需要的话,还会更新内容)。
我遇到的问题是,shelve没有一个方便的方式来处理并发访问或锁定机制。我了解到我有两个选择:
- 要么我不使用shelve,换用其他模块来管理我的简单数据库(比如sqlite3,不过它比shelve模块稍微复杂一些)。
- 要么我自己创建一个可以在网络上由多台机器使用的锁定机制(到目前为止,我还没找到一个看起来完全可靠的模块)。
如果可能的话,还有一些额外的要求:
- 主要是在Windows上使用,但我希望这个解决方案是跨平台的,这样我也可以在Linux上重复使用。
- 网络文件系统可以通过标准的资源管理器(在Linux/Windows上)通过类似"\Machine\Folder"的地址访问。它可以是一个文件服务器,或者只是其中一台机器上的共享文件夹。
有什么建议吗?
谢谢!
1 个回答
1
多平台锁定。你最好的选择是 portalocker(https://pypi.python.org/pypi/portalocker/0.3)。我们已经广泛使用它——效果非常好!