7
다음은 다중 처리를 사용하는 샘플 프로그램입니다. 계산은 multiprocessing.Process
으로 수행되고 결과는 multiprocessing.Queue
을 사용하여 수집됩니다. 다중 처리 : PyObject_Call에서 오류없이 NULL 결과
Traceback (most recent call last):
File "/usr/lib/python2.7/multiprocessing/queues.py", line 266, in _feed
send(obj)
SystemError: NULL result without error in PyObject_Call
내가 그것을 버그라고
here을 읽어 여기에
#THIS PROGRAM RUNS WITH ~40Gb RAM. (you can reduce a,b,c for less RAM
#but then it works for smaller values)
#PROBLEM OCCURS ONLY FOR HUGE DATA.
from numpy import *
import multiprocessing as mp
a = arange(0, 3500, 5)
b = arange(0, 3500, 5)
c = arange(0, 3500, 5)
a0 = 540. #random values
b0 = 26.
c0 = 826.
def rand_function(a, b, c, a0, b0, c0):
Nloop = 100.
def loop(Nloop, out):
res_total = zeros((700, 700, 700), dtype = 'float')
n = 1
while n <= Nloop:
rad = sqrt((a-a0)**2 + (b-b0)**2 + (c-c0)**2)
res_total += rad
n +=1
out.put(res_total)
out = mp.Queue()
jobs = []
Nprocs = mp.cpu_count()
print "No. of processors : ", Nprocs
for i in range(Nprocs):
p = mp.Process(target = loop, args=(Nloop/Nprocs, out))
jobs.append(p)
p.start()
final_result = zeros((700, 700, 700), dtype = 'float')
for i in range(Nprocs):
final_result = final_result + out.get()
p.join()
test = rand_function(a,b,c,a0, b0, c0)
는 오류 메시지입니다. 그러나 나는 이해할 수 없다. 누구나 멀티 프로세싱을 사용하여 거대한 데이터를 계산할 수있는 방법을 알려주시겠습니까?
매우
OP는'multiprcessing.Queue'를 통해 2.56GB Numpy 배열을 넣으려고합니다. 이것은 여전히 상대적으로 많은 양이며 메모리가 부족하거나 피클 모듈에 의해 지원되지 않을 수 있습니다. –
Python 3은 대형 절임과 관련된 몇 가지 문제점을 수정하므로 가능한 경우 시도해보십시오. –