다중 처리를 통해 생성 된 자식 프로세스 는 프로그램에서 이전에 생성 된 객체를 공유합니까?
다음 설정이 있습니다.
do_some_processing(filename):
for line in file(filename):
if line.split(',')[0] in big_lookup_object:
# something here
if __name__ == '__main__':
big_lookup_object = marshal.load('file.bin')
pool = Pool(processes=4)
print pool.map(do_some_processing, glob.glob('*.data'))
큰 개체를 메모리에로드 한 다음 해당 큰 개체를 사용해야하는 작업자 풀을 만듭니다. 큰 개체는 읽기 전용으로 액세스되며 프로세스간에 수정 사항을 전달할 필요가 없습니다.
내 질문은 : 내가 유닉스 / C에서 프로세스를 생성 한 경우와 같이 빅 객체가 공유 메모리에로드됩니까? 아니면 각 프로세스가 자체 빅 객체 사본을로드합니까?
업데이트 : 더 명확히하기 위해-big_lookup_object는 공유 조회 개체입니다. 나는 그것을 나누고 별도로 처리 할 필요가 없습니다. 사본 한 장을 보관해야합니다. 분할해야하는 작업은 많은 다른 대용량 파일을 읽고 조회 개체에 대해 해당 대용량 파일의 항목을 찾는 것입니다.
추가 업데이트 : 데이터베이스는 훌륭한 솔루션이고, memcached가 더 나은 솔루션 일 수 있으며, 디스크상의 파일 (shelve 또는 dbm)이 더 좋을 수 있습니다. 이 질문에서 저는 특히 메모리 솔루션에 관심이있었습니다. 최종 솔루션으로는 hadoop을 사용할 것이지만 로컬 메모리 버전도 사용할 수 있는지 확인하고 싶었습니다.
marshal.load
부모와 각 자식을 호출 합니다 (각 프로세스는 모듈을 가져옵니다).