Я хочу использовать массив для общей памяти. Проблема в том, что программа структурирована таким образом, что дочерние процессы порождаются, прежде чем я узнаю размер общего массива. Если я отправляю сообщение для расширения массива, ничего не происходит, и если я попытаюсь отправить сам общий массив, я получаю сообщение об ошибке. Ниже представлен небольшой сценарий, демонстрирующий мою проблему.Как изменить размер общей памяти в Python
import multiprocessing as mp
import numpy as np
def f(a,pipe):
while True:
message, data = pipe.recv()
if message == 'extend':
a = np.zeros(data)
print a
elif message == 'exit':
break
if __name__ == '__main__':
unshared_arr = np.zeros(1)
a = mp.Array('d', unshared_arr)
p1,p2 = mp.Pipe()
p = mp.Process(target=f, args=(a,p2))
p.start()
p1.send(('extend', 10))
p1.send(('exit', None))
p.join()
b = np.frombuffer(a.get_obj())
'a = np.zeros (data)' не будет иметь никакого эффекта вне вызова функции даже в пределах одного и того же процесса. – jfs
Правда, но я пробовал объявлять 'a' как глобальную переменную вместо того, чтобы иметь ее как входной аргумент в процессах и в' f', но я все еще не могу заставить его работать. – Chicony