Python でマルチプロセッシングを実験しており、2 つのプロセス間で文字列の配列を共有しようとしました。ここに私のpythonコードがあります:
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
スクリプトを実行すると、arr
正しく設定されており、 では利用可能ですが、 では利用できf1()
ないことがわかりますf2()
。結果は次のとおりです。
% python /tmp/tests.py
Before : [None, None, None] 0
f1 : ['aaa', 'bbb', 'ccc'] 1
f2 : ['\x01', '\x11', '\x01'] 2
After : ['\x01', '\x01', '\x01'] 2
私は何かを見落としましたか?
フィードバックをお寄せいただきありがとうございます。:)