Shared Array wurde in Python Multiprocessing nicht richtig freigegeben
Ich experimentiere mit Multiprocessing in Python und habe versucht, ein Array von Strings zwischen zwei Prozessen zu teilen. Hier ist mein Python-Code:
from multiprocessing import Process, Array, Value
import ctypes
def f1(a, v):
for i, l in enumerate(['a', 'b', 'c']):
a[i] = l*3
v.value += 1
print "f1 : ", a[:], v.value
def f2(a,v):
v.value += 1
print "f2 : ", a[:], v.value
if __name__ == '__main__':
val = Value(ctypes.c_int, 0)
arr = Array(ctypes.c_char_p, 3)
print "Before :", arr[:], val.value
p = Process(target=f1, args=(arr, val))
p2 = Process(target=f2, args=(arr, val))
p.start()
p2.start()
p.join()
p2.join()
print "After : ", arr[:], val.value
Wenn ich das Skript starte, sehe ich dasarr
ist korrekt ausgefüllt und verfügbar inf1()
aber nicht inf2()
. Hier ist das Ergebnis:
% python /tmp/tests.py
Before : [None, None, None] 0
f1 : ['aaa', 'bbb', 'ccc'] 1
f2 : ['\x01', '\x11', '\x01'] 2
After : ['\x01', '\x01', '\x01'] 2
Habe ich etwas übersehen?
Vielen Dank im Voraus für Ihr Feedback. :)