Je souhaite limiter la quantité de mémoire consommée par mes files d'attente de messages ZeroMQ dans une application Python. Je sais que le fait de placer la marque des hautes eaux limitera la quantité qui sera mise en file d'attente du côté de l'expéditeur, mais y a-t-il un moyen de contrôler combien sera mis en file d'attente du côté du receveur? La liaison Python ZeroMQ semble l'avoir illimitée.Limitation de la longueur de la file d'attente avec PyZMQ
Mon scénario de test: J'ai deux terminaux python que j'utilise pour tester. L'un est le récepteur:
Python 2.5.1 (r251:54863, Aug 25 2008, 20:50:04)
[GCC 4.1.2 20071124 (Red Hat 4.1.2-42)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import zmq.core
>>> context=zmq.Context()
>>> socket = context.socket(zmq.PULL)
>>> socket.setsockopt(zmq.RCVBUF, 256)
>>> socket.bind("tcp://127.0.0.1:12345")
L'autre est l'expéditeur:
Python 2.5.1 (r251:54863, Aug 25 2008, 20:50:04)
[GCC 4.1.2 20071124 (Red Hat 4.1.2-42)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import zmq.core
>>> context=zmq.Context()
>>> socket = context.socket(zmq.PUSH)
>>> socket.setsockopt(zmq.SNDBUF, 2048)
>>> socket.setsockopt(zmq.HWM, 1)
>>> socket.connect("tcp://127.0.0.1:12345")
>>> num = 0
>>> while True:
... print num
... socket.send(str(num))
... num = num + 1
...
je lance socket.recv()
sur le côté récepteur une ou deux fois pour vous assurer que la file d'attente fonctionne, mais à part ça, laissez deux terminaux restent juste là. La boucle d'envoi semble ne jamais bloquer et l'invite de réception semble avoir une empreinte mémoire croissante.