Python 中的无服务器并发写入访问



Python 中是否有任何包支持使用无服务器架构在 NFS 上进行并发写入?

我在一个拥有超级计算机的环境中工作,多个作业并行保存数据。虽然我可以将这些计算的结果保存在单独的文件中,并在以后合并它们的结果,但这需要我编写一个读者,该阅读器知道我在作业之间拆分计算的特定方式,以便它知道如何正确拼接最终数据结构中的所有内容。

上次我检查SQLite不支持NFS中的并发性。SQLite有其他选择吗?

注意:无服务器是指避免显式启动另一个处理 IO 请求的服务器(在 NFS 之上(。我知道 NFS 使用客户端-服务器架构,但这个文件系统已经是我使用的超级计算机的一部分。我不需要维护自己。我正在寻找的是支持并发 IO 的包或文件格式,而无需我设置任何(额外的(服务器。

例:

下面是我将并行运行的两个作业的示例:

  • 作业 1 使用以下数据从头开始填充my_dict,并将其保存到file

    my_dict{'a'}{'foo'} = [0.2, 0.3, 0.4]

  • 作业 2 还会使用以下数据从头开始填充my_dict,并将其保存到file

    my_dict{'a'}{'bar'} = [0.1, 0.2]

我想稍后加载file,并在my_dict中看到以下内容:

> my_dict{'a'}.items()
[('foo', [0.2, 0.3, 0.4]), ('bar', [2, 3, 5])]

请注意,拼接操作是自动的。在这种特殊情况下,我选择在计算中my_dict['a']拆分键,但其他拆分也是可能的。基本思想是工作之间没有冲突。它隐式地假设作业添加/聚合数据,因此字典(如果使用 Pandas 则为数据帧(的融合总是导致聚合数据,即计算数据的"外连接"。

简单的DIY,可能是片状的

分层锁定 - 即您首先锁定/,然后锁定/foo并解锁/,然后锁定/foo/bar并解锁/foo。对/foo/bar进行更改并解锁。

这允许其他进程访问其他路径。/上的锁争用相对较小。

复杂的DIY

适应无锁或无等待算法,例如 RCU。指针成为包含其他路径列表的符号链接或文件。

http://www.rdrop.com/users/paulmck/rclock/intro/rclock_intro.htmlhttps://dank.qemfd.net/dankwiki/index.php/Lock-free_algorithms

最新更新