2014-11-11 4 views
2

multiprocessing.sharedctypes.Array()를 사용하여 다중 처리를 위해 공유 메모리를 할당합니다. 그러나 프로그램이 실행될 때 kernel_task가 많은 메모리 (9GB)를 사용하고 스왑 메모리가 증가하는 것을 관찰합니다. 그래서 파이썬은 자동으로 공유 메모리에 할당 된 메모리를 수집합니까 궁금해?파이썬은 multiprocessing.sharedctypes를 사용하여 공유 메모리에 할당 된 메모리를 수집합니까?

또한 다중 처리의 코드를 검사했습니다. 힙에는 malloc() 및 free()가 있습니다. 그러나 sharedctype s.py에서는 malloc() 만 호출합니다.

답변

1

마지막으로 해결책을 찾았습니다. 이 같은 기능에 멀티를 할 multiprocess.Pool.map를 사용

def gemm(): 
    pool = multiprocess.Pool(processes=4) 
    pool.map(some_fun,arg_list) 

for i in xrange(10): 
    gemm() 

그러나, 나는 pool.map 후 pool.close()와 pool.join()를 추가하는 것을 잊지. 그래서 나는 보석이라고 부를 때마다 약간의 기억이들 것입니다. 참조 카운트가 0 인 경우에도 풀에서 자원을 해제하지 않습니다. 할 올바른 것은 pool.close()와 pool.join()를 추가 할 수 있습니다 :

def gemm(): 
    pool = multiprocess.Pool(processes=4) 
    pool.map(some_fun,arg_list) 
    pool.close() 
    pool.join() 

for i in xrange(10): 
    gemm() 

난 아직도 풀의 자원을 배출하지 않는 정확한 이유가 무엇 확실하지 않다,하지만이 솔루션입니다 .

+0

명시 적 정리가 필요 없도록'def gemm() : Pool (4)를 p : p.map (..)'할 수도 있습니다. 그러나 어느 쪽이든,이 답변은 당신의 원래 질문에 대답하지 않고 메모리 누출을 수정하는 것으로 보입니다. 언제'sharedtype '이 실제로 공개 될까요? – benjimin

관련 문제