file d'attente python & amp; file d'attente de multitraitement: comment se comportent-ils?
Cet exemple de code fonctionne (je peux écrire quelque chose dans le fichier):
from multiprocessing import Process, Queue
queue = Queue()
def _printer(self, queue):
queue.put("hello world!!")
def _cmdDisp(self, queue):
f = file("Cmd.log", "w")
print >> f, queue.get()
f.close()
à la place de cette autre exemple de ne pas: (errormsg: 'module' objet n'est pas appelable)
import Queue
queue = Queue()
def _printer(self, queue):
queue.put("hello world!!")
def _cmdDisp(self, queue):
f = file("Cmd.log", "w")
print >> f, queue.get()
f.close()
cet autre sample non (je ne peux pas écrire quelque chose dans le fichier):
import Queue
queue = Queue.Queue()
def _printer(self, queue):
queue.put("hello world!!")
def _cmdDisp(self, queue):
f = file("Cmd.log", "w")
print >> f, queue.get()
f.close()
Quelqu'un peut m'expliquer les différences? et le droit de faire?
source d'informationauteur DrFalk3n
Vous devez vous connecter pour publier un commentaire.
Pour votre deuxième exemple, vous avez déjà donné l'explication vous-même---
Queue
est un module, qui ne peut pas être appelé.Pour le troisième exemple: je suppose que vous utilisez
Queue.Queue
avecmultiprocessing
. UnQueue.Queue
ne seront pas partagées entre les processus. Si leQueue.Queue
est déclarée avant le processus chaque processus reçoit une copie de ce qui est alors indépendante de tous les autres processus. Les éléments placés dans leQueue.Queue
par le parent avant de commencer les enfants seront à la disposition de chaque enfant. Les éléments placés dans leQueue.Queue
par les parents après le départ de l'enfant ne sera disponible que pour le parent.Queue.Queue
est fait pour l'échange de données entre les différents fils à l'intérieur du même processus (à l'aide de la filetage module). Le traitement multiple des files d'attente pour l'échange de données entre les différents Python processus. Alors que l'API ressemble (il est conçu pour être de cette façon), les mécanismes sous-jacents sont fondamentalement différents.multiprocessing
les files d'attente de l'échange de données par décapage (sérialisation) des objets et de les envoyer dans des tuyaux.Queue.Queue
utilise une structure de données qui est partagé entre les threads et les verrous/mutex pour corriger son comportement.