Я не уверен, подходит ли этот заголовок для моей ситуации: причина, по которой я хочу поделиться массивом numpy, заключается в том, что это может быть одним из потенциальных решений для моего случая, но если у вас есть другие решения, которые такжеприятно.
Моя задача: мне нужно реализовать алгоритм итеративный с многопроцессорной обработкой , в то время как каждый из этих процессов должен иметь копию данных (эти данные большиеи только для чтения , и не будет меняться во время итерационного алгоритма).
Я написал некоторый псевдокод, чтобы продемонстрировать мою идею:
import multiprocessing
def worker_func(data, args):
# do sth...
return res
def compute(data, process_num, niter):
data
result = []
args = init()
for iter in range(niter):
args_chunk = split_args(args, process_num)
pool = multiprocessing.Pool()
for i in range(process_num):
result.append(pool.apply_async(worker_func,(data, args_chunk[i])))
pool.close()
pool.join()
# aggregate result and update args
for res in result:
args = update_args(res.get())
if __name__ == "__main__":
compute(data, 4, 100)
Проблема в каждой итерации, я должен передавать данные в подпроцесс, который занимает очень много времени.
Я предложил два возможных решения:
- обмениваться данными между процессами (это ndarray), вот название этого вопроса.
- Поддерживать подпроцесс живым, как процесс демона или что-то ... и ждать вызова.При этом мне нужно только передать данные в самом начале.
Итак, есть ли какой-нибудь способ разделить массив только для чтения между процессами?Или, если у вас есть хорошая реализация решения 2, оно также работает.
Заранее спасибо.