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. :)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage