以下のコードでは、Starter
オブジェクトをgen.vals
と読むことができますか? 異なるオブジェクトが作成され、その状態が更新されるようですが、Starter
はそれについて知りません。また、解答はどのようにしてself.vals
が辞書か他の種類のオブジェクトになるのでしょうか?プロセス間でオブジェクトの状態を共有しますか?
import multiprocessing
import time
class Generator(multiprocessing.Process):
def __init__(self):
self.vals = []
super(Generator, self).__init__()
def run(self):
i = 0
while True:
time.sleep(1)
self.vals.append(i)
print 'In Generator ', self.vals # prints growing list
i += 1
class Starter():
def do_stuff(self):
gen = Generator()
gen.start()
while True:
print 'In Starter ', gen.vals # prints empty list
time.sleep(1)
if __name__ == '__main__':
starter = Starter()
starter.do_stuff()
出力:
In Starter []
In Starter []
In Generator [0]
In Starter []
In Generator [0, 1]
In Starter []
In Generator [0, 1, 2]
In Starter []
In Generator [0, 1, 2, 3]
In Starter []
In Generator [0, 1, 2, 3, 4]
In Starter []
In Generator [0, 1, 2, 3, 4, 5]
In Starter []
In Generator [0, 1, 2, 3, 4, 5, 6]
In Starter []
In Generator [0, 1, 2, 3, 4, 5, 6, 7]
https://docs.python.org/2/library/multiprocessing.htmlセクション16.6.1.4 –
この例の解決策を説明してください。これは、最小限の自己完結型の再現可能な例なので、難しくはありません。 –