2014-09-20 6 views
0

나는 python1.py와 python2.py라는 큰 변수를 서로 통신해야하는 두 개의 python 스크립트를 가지고있다.파이썬 - 메모리에서 변수를 가져 오는 중?

python1.py가 실행 중이고 매우 큰 목록 변수 'x'가 생성되었다고 가정 해 보겠습니다. 지금은 하드 드라이브에 'x'를 저장하고 python2.py를 실행하기 위해 하위 프로세스를 사용하여 하드 드라이브에서 'x'를로드합니다. (두 개의 다른 파이썬 파일이 필요합니다. 계산을 병렬화하기 위해).

메모리에 대한 포인터 인 인수를 사용하여 python2.py를 호출 한 다음 python2.py에서 직접 메모리를 기반으로 'x'를 만들 수있는 대체 방법이 있습니까?

+0

두 번째 스크립트를 실행하려면 생성기 스크립트 ('x' 목록 생성)를 사용하고 있습니까? "매우 큰"크기는 얼마입니까? 계산의 중요도가 중요합니까? –

+2

mmap이이를 수행 할 수 있어야합니다. 이 기사가 도움이 될 것입니다 : http://blog.schmichael.com/2011/05/15/sharing-python-data-between-processes-using-mmap/ – Lanting

+0

이것이 리눅스 인 경우, python2를 가져 와서 다중 처리 모듈을 사용할 수 있습니다 당신이 거기서 달리고 싶은 기능을 포크하십시오. 리눅스에서는 포크 할 때 동일한 메모리를 사용하므로 직렬화 할 필요가 없습니다. Windows에서 mp는 어쨌든 직렬화되므로 실제 이점이 없습니다. – tdelaney

답변

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] 
관련 문제