【问题标题】:Serverless concurrent write access in PythonPython 中的无服务器并发写访问
【发布时间】:2013-12-10 19:28:01
【问题描述】:

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

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

上次我检查 SQLiteNFS 中不支持并发。 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,则为数据框)总是导致聚合数据,即计算 “外连接”数据。

【问题讨论】:

  • 您的问题非常令人困惑,因为您谈论的是 NFS,但随后使用了“无服务器”一词。由于 NFS 总是有一个服务器,它没有任何意义。你能改写一下吗?
  • 谢谢@Gabe - 我已经更新了我的 OP 来解决你的问题。
  • 那么您要编写的 Python 脚本将写入已挂载的 NFS 卷?在这种安排下,您的 python 脚本是客户端(不需要额外的服务器 :)
  • @JasonSperske 正确。
  • 这是一个非常困难的问题。你不可能找到任何已经写好的东西。

标签: python binaryfiles hpc


【解决方案1】:

简单的 DIY,可能很不稳定

分层锁定 - 即先锁定 /,然后锁定 /foo 并解锁 /,然后锁定 /foo/bar 并解锁 /foo。更改/foo/bar 并解锁它。

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

复杂的DIY

采用无锁或无等待算法,例如控制单元。指针变成符号链接或包含其他路径列表的文件。

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

【讨论】:

    猜你喜欢
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 2015-12-15
    • 1970-01-01
    相关资源
    最近更新 更多