2017-04-11 5 views
-1

많은 데이터 행 (pandasDataFrame)을 처리해야하지만 각 계산은 독립적이므로 병렬 처리하고 싶습니다.numpy 배열로 동시에 쓰기

그래서 나는 행을 가져 와서 객체를 출력하는 함수를 가지고 있습니다. 실제로 출력은 문자열과 집합을 포함하는 배열입니다.

def compute_row(index, row, output):  
    output[index] = some_function(row) 

그리고 나서 그것을 병렬로 사용하려고합니다.

output = np.empty(data_length, dtype=object) 

num_cores = multiprocessing.cpu_count() 
Parallel(n_jobs=num_cores)(delayed(compute_row)(i, row, outputx) for i, row in db.iterrows()) 

문제

내가 예를 들어 1에 의해 some_function를 교체 할 경우에도 다시 None의 배열을 얻을 수 있다는 것입니다.

인덱스가 고유하므로 동시 메모리 액세스 문제가 없어야합니다. 내가 여기서 무엇을 놓치고 있니? 어쩌면 다른 데이터 구조를 사용해야합니까?

미리 감사드립니다.

+0

출력은 'compute_row'메소드가 무언가를 반환하기 때문에'None'의 배열입니다. 왜'some_function (row)'을 반환하지 않습니까? –

답변

0

좋아, 다른 방법으로, Pool 개체를 사용하여 발견했습니다.

from multiprocessing import Pool 

def compute_row(row):  
    return some_function(row) 

pool = Pool() 
output = pool.map(compute_row, (row for i, row in db.iterrows()))