Der folgende Code bezieht sich auf die Kommunikation zwischen zwei untergeordneten Prozessen durch die Warteschlange. Ich kann nicht herausfinden, warum die self.q.qsize() Null ist und self.q.get() ist in der Funktion "ACT" blockiert .... .... Da der Zähler zeigt, ist die Warteschlange voll. ..warum die Warteschlange für die Kommunikation in diesem Multiprozess-Fall nicht funktioniert
#!/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"
Aber die self.q = Queue (1) erklärt im Init-Teil der Klasse entfernen haben, und du meinst, wenn ich den zweiten Prozess für "pr" nenne, ist dies self.q ist Gabel, aber nicht teilen die gleiche Erinnerung? Wenn die Wahrheit nicht so ist, bitte geben Sie mir weitere Hilfe zu diesem Konzept ... – puming
@ PuMing.Z Korrekt, während es den gleichen Speicher auf bestimmten Betriebssystemen zunächst per Copy-on-Write teilen kann, ändert man nicht die andere. – Jared
Sie meinen die Deepcopy? Ich freue mich für Ihre Hilfe zu diesem Thema. Ich schreibe jetzt weiter ... ha – puming