Я хочу использовать многопроцессорность, где одним из аргументов является очень большой массив numpy. Я исследовал некоторые другие сообщения, которые, по-видимому, имеют аналогичные проблемы.
Большие массивы numpy в общей памяти для многопроцессорной обработки: что-то не так с этим подходом?
Общий доступ к большому массиву Numpy только для чтения между многопроцессорными процессами
но, поскольку я новичок в python, у меня возникли проблемы с адаптацией решений к этому шаблону и в этой форме. Интересно, могу ли я попросить вашей помощи, чтобы понять, какие у меня есть варианты, чтобы передать X функциям только для чтения. Мой упрощенный фрагмент кода находится здесь:
import multiprocessing as mp
import numpy as np
def funcA(X):
# do something with X
print 'funcA OK'
def funcB(X):
# do something else with X
print 'funcB OK'
if __name__=='__main__':
X=np.random.rand(int(5.00e8),)
funcA(X) # OK
funcB(X) # OK
X=np.random.rand(int(2.65e8),)
P=[]
P.append(mp.Process(target=funcA,args=(X,))) # OK
P.append(mp.Process(target=funcB,args=(X,))) # OK
for p in P:
p.start()
for p in P:
p.join()
X=np.random.rand(int(2.70e8),)
P=[]
P.append(mp.Process(target=funcA,args=(X,))) # FAIL
P.append(mp.Process(target=funcB,args=(X,))) # FAIL
for p in P:
p.start()
for p in P:
p.join()
funcA и funcB, по-видимому, принимают очень большие массивы numpy при последовательном вызове. Однако, если они вызываются как мультипроцессы, то, по-видимому, существует верхний предел размера массива numpy, который может быть передан функции. Как мне лучше обойти это?
Примечание.
0) я не хочу модифицировать X; только читать из него;
1) У меня 64-битная Windows 7 Professional.
X
уникален в вашем коде? Или вам нужно вызывать два метода для других переменных? - person Roberto Trani   schedule 30.01.2018dim
находится где-то между 5,368e8 и 5,369e8, и это вдвое превышает «старый» пределdim
, который был где-то между 2,684e8 и 2,685e8. Удвоение возможно из-заdtype=np.float32
вместоdtype=np.float
. Я также немного поигрался сmax_chunk_size
, но это не помогло обойти проблему. - person cpicke1   schedule 31.01.2018