【问题标题】:Python - retrieving a variable from memory?Python - 从内存中检索变量?
【发布时间】:2014-09-20 15:27:32
【问题描述】:

我有两个 python 脚本需要相互传递大变量:python1.py 和 python2.py。

假设 python1.py 正在运行并创建了一个非常大的列表变量“x”。目前,我正在将“x”保存(酸洗)到硬盘驱动器,然后使用子进程运行 python2.py,然后从硬盘驱动器加载“x”(我需要两个不同的 python 文件,因为我正在尝试并行计算)。

是否有替代方法,我可以使用作为指向内存的指针的参数调用 python2.py,然后让 python2.py 基于直接在内存中查找它来创建“x”?

【问题讨论】:

  • 您是否使用生成器脚本(它会创建您的x 列表)来启动第二个脚本? “非常大”有多大?计算的顺序重要吗?
  • mmap 应该可以做到这一点。这篇文章可能会有所帮助:blog.schmichael.com/2011/05/15/…
  • 如果是 linux,你可以导入 python2 并使用多处理模块 fork 到你想在那里运行的函数。在linux中,当你fork时,你拥有相同的内存,所以你不需要序列化它。在 Windows 上, mp 无论如何都会序列化,所以没有真正的好处。
  • @BurhanKhalid 是的,生成器脚本启动了第二个脚本,顺序不重要,大约 50MB。我认为 mmap 是我一直在寻找的,谢谢兰亭。我在 Windows 上尝试了多处理,但由于奇怪的原因它一直在崩溃。 Numpy 数组也是另一种方法,感谢 marscher

标签: python variables memory


【解决方案1】:

如果您正在考虑跨进程拆分计算,我强烈建议您阅读“多处理”模块,其中包含进程池、管理器和跨进程边界共享高级数据结构的能力等概念。例如查看文档中的"sharing state between two processes" 部分。来自文档:

from multiprocessing import Process, Array

def f(a):
    for i in range(len(a)):
        a[i] = -a[i]

if __name__ == '__main__':
    arr = Array('i', range(10))

    p = Process(target=f, args=(arr,))
    p.start()
    p.join()

    print(arr[:])

#output: [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    相关资源
    最近更新 更多