0
次のコードは、2つの子プロセス間の通信をキュー単位で示したものです。 self.q.qsize()がゼロで、self.q.get()が "ACT"関数でブロックされているのはなぜですか?....カウンタはキューがいっぱいであることを示しています。 ..このマルチプロセスの場合、キューが通信に使用できない理由
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from multiprocessing import Process
import multiprocessing
import time
from Queue import Queue
class Test():
def __init__(self):
self.q = Queue(1)
def ACT(self):
while True:
print "B momoent queue size: %s" %self.q.qsize()
print self.q.get()
time.sleep(1)
def counter(self):
for i in range(5,10):
if not i == 5:
print "Hello1"
print self.q.full()
self.q.join()
print "Hello2"
self.q.put(str(i))
print "A moment queue size: %s" % self.q.qsize()
if __name__ == '__main__':
foo = Test()
qw = Process(target=foo.counter)
qw.start()
qr = Process(target=foo.ACT)
qr.start()
qw.join()
print "End"
に
join
メソッド呼び出しとおそらくqsize
を削除する必要があります。しかしself.qは=キュー(1)は、クラスの初期化部分で宣言され、あなたは私が "pr"の2番目のプロセスを呼び出すと、このself.qはフォークですが、同じメモリを共有していませんか?真実がこのようなものではないなら、私にこの概念についてもっと助けてください... – puming@ PuMing.Z正解ですが、最初にコピーオンライトを使って特定のOSで同じメモリを共有するかもしれませんが、その他。 – Jared
あなたはdeepcopyを意味しますか?私はあなたの助けに感謝します。私は今コーディングを続けています... ha – puming