Pythonでは、プロセス間でオブジェクトを交換することは十分に文書化されています。キュー、パイプ、またはプールを使用する必要があります(doc参照)。では、なぜこれらのコミュニケーションツールがなくても、このスーパーシンプルなコードが動作するのですか?それが唯一のスレッド間で共有メモリに頼っているためこのプロセス間通信はなぜ機能していますか?
from multiprocessing import Process
from time import sleep
from random import random
class Child_process(Process):
def __init__(self):
super(Child_process,self).__init__()
self._memory = {'a':1}
def writeInMemory(self,key,value):
self._memory[key]=value
def readFromMemory(self,key):
return self._memory[key]
def run(self):
while True:
sleep(random())
def main():
# start up the child process:
child = Child_process()
child.daemon=True
child.start()
print 'Type Ctrl C to stop'
while True:
print "in sub process a = ", child.readFromMemory('a')
child.writeInMemory('b',random())
print "in sub process b = ", child.readFromMemory('b')
sleep(5*random())
# exiting
child.terminate()
child.join()
if __name__ == '__main__':
main()
結果は
Type Ctrl C to stop
in sub process a = 1
in sub process b = 0.469400505093
in sub process a = 1
in sub process b = 0.43154478374
in sub process a = 1
in sub process b = 0.519863589476
私が見ている限り、1つの子プロセスしか開始していません。 mainメソッドで実行されているwhileループで、 "In sub-process a/b"を印刷しています。プロセス間のコミュニケーションはありません。 – EngineeredBrain
OK。今、私は分かる。どうもありがとう。 – user3650925