【发布时间】: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 无论如何都会序列化,所以没有真正的好处。
-
会为此任务推荐 numpy 数组:docs.scipy.org/doc/numpy/reference/generated/numpy.memmap.html
-
@BurhanKhalid 是的,生成器脚本启动了第二个脚本,顺序不重要,大约 50MB。我认为 mmap 是我一直在寻找的,谢谢兰亭。我在 Windows 上尝试了多处理,但由于奇怪的原因它一直在崩溃。 Numpy 数组也是另一种方法,感谢 marscher