Python的无服务器并发写访问

7
有没有Python中的包支持使用无服务器架构在NFS上并发写入?我在一个超级计算机环境中工作,多个作业并行保存其数据。虽然我可以将这些计算结果保存在单独的文件中,并稍后组合它们的结果,但这要求我编写一个阅读器,该阅读器了解我如何跨作业拆分我的计算的特定方式,以便它知道如何在最终的数据结构中正确地缝合所有内容。上次我检查时,SQLite不支持NFS中的并发性。有没有SQLite的替代方案?
注意:通过“无服务器”,我是指避免显式启动另一个(在NFS之上)处理IO请求的服务器。我理解NFS使用客户端-服务器架构,但这个文件系统已经是我使用的超级计算机的一部分。我不需要自己维护。我正在寻找的是一个支持并发IO而无需设置任何(额外)服务器的包或文件格式。
示例:以下是我要并行运行的两个作业的示例:
作业1从头开始使用以下数据填充my_dict,并将其保存在文件中: my_dict{'a'}{'foo'} = [0.2, 0.3, 0.4]
作业2也从头开始使用以下数据填充my_dict,并将其保存在文件中: my_dict{'a'}{'bar'} = [0.1, 0.2]
我希望稍后加载文件,并在my_dict中看到以下内容:
> my_dict{'a'}.items()
[('foo', [0.2, 0.3, 0.4]), ('bar', [2, 3, 5])]

请注意,拼接操作是自动完成的。在这种情况下,我选择将键在my_dict ['a']中分成多个计算,但也可以进行其他分割。基本思想是作业之间没有冲突。它隐含地假设作业添加/聚合数据,因此字典(如果使用Pandas,则为数据框)的融合始终会聚合数据,即计算数据的"外连接"

你的问题非常令人困惑,因为你谈到NFS,但又使用“无服务器”这个术语。由于NFS总是有一个服务器,所以这毫无意义。你可以重新表述一下吗? - Gabe
谢谢@Gabe - 我已经更新了我的原帖以回答你的问题。 - Josh
所以你想要编写的Python脚本将会写入到已挂载的NFS卷中?在这种安排下,你的Python脚本是客户端(无需额外的服务器 :) - Jason Sperske
@JasonSperske 正确。 - Josh
1
这是一个非常困难的问题。你不太可能找到已经写好的东西。 - Gabe
@Josh 我同意 @Gabe 的看法,你的要求太苛刻了。如果你能放宽对“无服务器”的要求,我建议尝试使用 Redis 键值存储 - 它快速、适用于 Linux 和 Windows,并且使用 redis 包非常容易。但是它绝对是一个服务器。 - Jan Vlcinsky
1个回答

1

简单的DIY,潜在不稳定

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

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

复杂的DIY

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接