J'ai du mal à comprendre comment le code suivant fonctionne:Utilisation de la file d'attente pour les boucles (Python)
from multiprocessing import Process, Queue
import os, time, random
def write(q):
for value in ['A', 'B', 'C']:
print 'Put %s to queue...' % value
q.put(value)
time.sleep(random.random())
def read(q):
while True:
value = q.get(True)
print 'Get %s from queue.' % value
if __name__=='__main__':
q = Queue()
pw = Process(target=write, args=(q,))
pr = Process(target=read, args=(q,))
pw.start()
pr.start()
pw.join()
pr.terminate()
Il semble que pw.join()
et synchronise pw
pr
mais je ne sais pas comment cela fonctionne. Je pensais pr.start()
procède après pw.start()
est complètement terminé, ce qui signifie Get %s from queue
ne pouvait être reçu après trois Put %s to queue...
avait été imprimé. J'ai également pensé pool()
est utilisé pour multiprocess et process
seulement est utilisé pour un seul processus, mais maintenant il semble que je me trompe totalement.
Merci pour toute aide!
'pool' est de créer un groupe de processus. 'Process' crée un seul processus séparé. Les deux sont des constructions multitraitement. –
"Je pensais que' pr.start() 'se produirait après que' pw.start() 'soit complètement terminé" - 'pw.start()' est "complètement fini" une fois qu'il a démarré 'pw'. Il n'attend pas que le processus 'pw' se termine. – user2357112
@ user2357112 Merci, mais quand je supprime pw.join(), je ne peux obtenir aucun message 'Get% s', pouvez-vous me dire quel est le rôle joué par pw.join()? –