2014-04-10 8 views
3

두 프로세스간에 공유 메모리에 다차원 배열이 있어야합니다. 나는 작동하는 간단한 예제를 만들려고한다 : 나는 [1, 2, 3, 4, 5, 6, 7, 8, 9]을 다른 프로세스에 보내고, 추가 메모리를 사용하지 않고 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]으로 바꾼다.공유 메모리 (다중 처리)에서 배열 버퍼에서 numpy 배열을 만들지 못함

import multiprocessing 
import ctypes 
import numpy 


def f(array): 
    nmp = numpy.frombuffer(array.get_obj(), dtype=int) 
    b = nmp.reshape((3, 3)) 


if __name__ == '__main__': 
    time_array = [] 
    import common_lib 
    common_lib.time_usage(time_array) 
    arr = multiprocessing.Array(ctypes.c_int, [1,2,3,4,5,6,7,8,9]) 
    p = multiprocessing.Process(target=f, args=(arr,)) 
    p.start() 
    p.join() 

나는 설명서에서와 똑같이했다. 그러나 기능 frombuffer이 오류를 범 :

ValueError: buffer size must be a multiple of element size

답변

8

NumPy와 어레이의 DTYPE 명시 32 비트 정수로 설정 될 필요가있다.

nmp = numpy.frombuffer(array.get_obj(), dtype="int32") 

64 비트 시스템에있는 경우는 64 비트 NumPy와 배열로 32 비트하는 ctypes 배열을 캐스팅하려고했던 것 같다.

+0

완벽하게 작동했습니다! 고마워요! 나는 64 비트 머신을 가지고있다. 경우에 따라 float 또는 double을 사용하면 어떤 유형이어야합니까? – soshial

+1

@soshial 단 정밀도 float은''float32 ''또는'np.float32'이고 배정 밀도 float은''float64''또는'np.float64'입니다. – ebarr

관련 문제