Test.py
from multiprocessing import Process
from random import random
class Test:
def __init__(self):
self.val= 0.0
def func(self):
self.val=random()
print self.val
if __name__ == '__main__':
tests=[]
prcs= []
for i in range(2):
tests.append(Test())
prcs.append( Process(target=tests[i].func) )
for p in prcs:
p.start()
for p in prcs:
p.join()
for t in tests:
print t.val
このようなプログラムを実行すると,
$ python Test.py
0.577127051322
0.331891187398
0.0
0.0
という結果になる.つまり,関数func()
内部でself.val
に格納した値が,その後無効になっている.
一方で,Process
に渡す関数に()
を付ける,つまり,
prcs.append( Process(target=tests[i].func()) )
のように変更すると,
$ python Test.py
0.872880584458
0.255770370005
0.872880584458
0.255770370005
のように関数func
内で代入したself.val
値がしっかりと保存されている.
これがどういうことなのか僕には理解できていないわけです...