2014-09-20 54 views
0

我有兩個python腳本,需要相互傳遞大的變量:python1.py和python2.py。Python - 從內存中檢索變量?

假設python1.py正在運行並創建了一個非常大的列表變量'x'。目前,我正在將硬盤驅動器保存(酸洗)'x',然後使用子進程運行python2.py,然後從硬盤驅動器加載'x'(我需要兩個不同的python文件,因爲我正在嘗試並行計算)。

是否有替代方案,我可以通過一個指向內存的參數調用python2.py,然後讓python2.py根據直接在內存中查找來創建'x'?

+0

您是否使用生成器腳本(它創建您的'x'列表)啓動第二個腳本? 「非常大」有多大?計算的順序是否重要? – 2014-09-20 15:30:49

+2

mmap應該可以做到這一點。本文可能有所幫助:http://blog.schmichael.com/2011/05/15/sharing-python-data-between-processes-using-mmap/ – Lanting 2014-09-20 15:34:16

+0

如果這是linux,您可以導入python2並使用多處理模塊分叉到你想在那裏運行的功能。在linux中,當你fork時,你有相同的內存,所以你不需要序列化它。在Windows上,無論如何序列化,所以沒有真正的好處。 – tdelaney 2014-09-20 15:39:06

回答

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]