J'ai une configuration de producteur avec N consommateurs.Débordement de file d'attente inter-processus Python
Le producteur écoute sur une socket qui reçoit un volume élevé de messages TCP (10 000 par min), lit ces données et les met dans la file d'attente pour les travailleurs.
Les travailleurs j'ai mis en place pour lire à partir de la file d'attente comme suit:
iterations = 0
work_iterations = 0
while True:
try:
iterations += 1
data = queue.get(block=False)
work_iterations +=1
do_work(data)
except Queue.Empty:
time.sleep(0.001) #avoid high CPU usage
if iterations == 100:
load = float(work_iterations/iterations)
print load
iterations = 0
work_iterations = 0
ce code est simplifié, mais vous pouvez voir que je suis en train de voir la charge des travailleurs, mais voir combien d'itérations sur de 100 le travailleur était en mesure de tirer le travail hors de la file d'attente. Si la charge est toujours 100/100, je sais que la file d'attente producteur/consommateur est en retard. Théoriquement ce devrait fonctionner.
Ce que je vois dans la sortie est beaucoup de 0,97, 0,99 et très peu 1,0. Mais la file d'attente se remplit en quelques minutes (elle a une taille limite de 10 000), et je dois commencer à supprimer des données du côté Producer. Quelqu'un peut-il faire la lumière sur la raison pour laquelle cela se produit? Si le processus de travail obtient des itérations de travail de 97/100 en moyenne, cela signifie que la file d'attente doit être proche de vide non? Et si vous supprimez block = Flase et time.sleep()?