【问题标题】:Python fork(): passing data from child to parentPython fork():将数据从子级传递给父级
【发布时间】:2011-09-07 19:05:07
【问题描述】:

我有一个主 Python 进程,以及由主进程使用 os.fork() 创建的一堆或多个工人。

我需要将大量且相当复杂的数据结构从工作人员传回主进程。您会为此推荐哪些现有库?

数据结构混合了列表、字典、numpy arrays、自定义类(我可以调整)和上述的多层组合。

应避免磁盘 I/O。如果我也可以避免创建数据副本——例如通过某种共享内存解决方案——那也很好,但不是硬约束。

就本问题而言,必须使用os.fork() 或其包装器创建工作器,从而克隆主进程的地址空间。

这只需要在 Linux 上运行。

【问题讨论】:

  • "应避免磁盘 I/O。"我假设这不包括分页,在内存中的数据量增长到足以需要分页的情况下。
  • @JAB:你的假设是正确的。但是,最终的解决方案应该是明智地使用内存。

标签: python numpy fork shared-memory large-data


【解决方案1】:

multiprocessing 的队列实现有效。在内部,它将数据腌制到管道中。

q = multiprocessing.Queue()
if (os.fork() == 0):
    print(q.get())
else:
    q.put(5)
# outputs: 5

【讨论】:

    猜你喜欢
    • 2020-09-22
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 2018-03-09
    • 2016-11-14
    • 2023-03-13
    • 2017-08-03
    • 1970-01-01
    相关资源
    最近更新 更多