LoginSignup
4
4

More than 5 years have passed since last update.

multiprocess.Processの引数による結果の違い

Posted at
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値がしっかりと保存されている.

これがどういうことなのか僕には理解できていないわけです...

4
4
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4