Ich möchte ein Array für den gemeinsamen Speicher verwenden. Das Problem ist, dass das Programm so strukturiert ist, dass die untergeordneten Prozesse erzeugt werden, bevor ich die Größe des gemeinsam genutzten Arrays kenne. Wenn ich eine Nachricht sende, um das Array zu erweitern, passiert nichts und wenn ich versuche, das Shared Array selbst zu senden, erhalte ich einen Fehler. Unten ist ein kleines Skript, um mein Problem zu demonstrieren.So ändern Sie die Größe eines gemeinsamen Speichers in 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 (Daten)' hat keine Auswirkungen außerhalb des Funktionsaufrufs, auch nicht im selben Prozess. – jfs
Wahr, aber ich habe versucht, 'a' als globale Variable zu deklarieren, anstatt sie als Eingabeargument in den Prozessen und in' f' zu haben, aber ich kann es immer noch nicht zum Laufen bringen. – Chicony