【问题标题】:Python: concurrent access (read/write) of network filePython:网络文件的并发访问(读/写)
【发布时间】:2014-03-28 22:58:32
【问题描述】:

使用 Python(我使用的是 v3.4),我正在创建一个程序,该程序将在最多 20 台同时连接到同一网络的机器上运行。 这些机器需要时不时地访问网络并进行一些操作(创建/删除/修改文件)……

我目前的计划是:

  • 网络将有一个文件夹“db”
  • 我将使用搁置模块将我的共享数据(包含一些路径名和一些日志记录信息的少于 3,000 个条目的简单字典)放在此文件夹中。由于没有太多数据,它是一个方便的模块,速度足够快
  • 为避免网络上的多台机器同时操作(并避免冲突),机器必须在执行任何操作之前锁定网络上的搁置文件(无论如何它们也需要更新此文件)并解锁仅在其操作结束时(必要时更新其内容)

我遇到的问题是 shelve 没有方便的并发访问或锁定机制的方法。我知道我的两种可能性是:

  • 要么我不使用搁置,而是使用另一个模块来管理我的简单数据库(例如:sqlite3,但它比简单搁置模块复杂一点)
  • 要么我创建了一个锁定机制,可以在多台机器上运行在网络上(到目前为止,我还没有找到一个看起来完全可靠的模块)

其他要求(如果可能)是:

  • 它将主要用于 Windows,但我希望该解决方案是跨平台的,以便我可以在 Linux 上重复使用它
  • 网络文件系统可以通过标准资源管理器(在 linux/windows 中)通过“\Machine\Folder”之类的地址访问。它可能是文件服务器,也可能只是其中一台机器上的共享文件夹。

有什么推荐吗?

谢谢

【问题讨论】:

  • 将涉及哪些操作系统,什么类型的网络文件系统?
  • 嗨。好问题。我在最后一段中添加了它

标签: python database concurrency shelve


【解决方案1】:

多平台,锁定。您最好的选择是 portalocker (https://pypi.python.org/pypi/portalocker/0.3)。我们已经广泛使用它——而且它是赢家!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 2013-08-17
    相关资源
    最近更新 更多