[zeromq-dev] zmqstream with req socket only sends the first message

drebs drebs at riseup.net
Tue Feb 3 16:00:09 CET 2015


Thanks a lot for your answer, now it works like a charm.

I couldn't find documentation about this, do you think it's a good idea to add
a paragraph to zmqstream.send docstring (or anywhere else) about threaded use?

If you think it's a good idea, I have a suggestion based on the info you gave
me. It's in the patch below, but feel free to modify in the way you think it
is more appropriate.

--

>From cf9418dc14b2dc2e1aca5be1b79a105982dcd877 Mon Sep 17 00:00:00 2001
From: drebs <drebs at riseup.net>
Date: Tue, 3 Feb 2015 12:50:59 -0200
Subject: [PATCH] Add doc for threaded zmqstream.send.

---
 zmq/eventloop/zmqstream.py |    8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/zmq/eventloop/zmqstream.py b/zmq/eventloop/zmqstream.py
index 86a97e4..59149ec 100644
--- a/zmq/eventloop/zmqstream.py
+++ b/zmq/eventloop/zmqstream.py
@@ -242,6 +242,14 @@ class ZMQStream(object):
     def send(self, msg, flags=0, copy=True, track=False, callback=None):
         """Send a message, optionally also register a new callback for sends.
         See zmq.socket.send for details.
+
+        When using threads, calling send on the zmqstream from another thread
+        doesn’t properly tell the IOLoop thread that there’s an event to
+        process. This could cause small delays if the IOLoop is already
+        processing lots of events, but it can also cause the message to never
+        be sent if the zmq socket is the only one it’s handling. In this case,
+        you should hand off the stream.send to the IOLoop’s thread via
+        IOLoop.add_callback.
         """
         return self.send_multipart([msg], flags=flags, copy=copy, track=track, callback=callback)
 
-- 
1.7.10.4



-- 


MinRK codificou 9.4K bytes:
>    Calling send on the zmqstream from another thread doesn’t properly tell
>    the IOLoop thread that there’s an event to process. This could call small
>    delays if the IOLoop is already processing lots of events, but it can
>    cause the message to never send if the zmq socket is the only one it’s
>    handling.
> 
>    You want your ZmqREQConnection.send to hand off the stream.send to the
>    IOLoop’s thread via IOLoop.add_callback:
> 
>  def send(self, *args, **kwargs):
>      print("Sending message to backend: (%s, %s)" % (args, kwargs))
>      self._ioloop.add_callback(lambda : self._stream.send(*args, **kwargs))
> 
>    -MinRK
> 
>    On Mon, Feb 2, 2015 at 12:58 PM, drebs [1]drebs at riseup.net wrote:
>    >
> 
>      Hello, zmq community.
> 
>      I’m trying to use a pyzmq’s zmqstream with a REQ socket to talk to a
>      txzmq REP
>      socket, but only the first message is ever sent and received back.
> 
>      REQ pyzmq endpoint code: [2]http://paste.debian.net/143615/
>      REP txzmq endpoint code: [3]http://paste.debian.net/143617/
> 
>      I would expect that all the messages would be sent. Am I missing
>      something
>      here?
> 
>      If I let some requests accumulate, and then start the server, all the
>      accumulated requests are replied, but the new ones are not sent.
> 
>      If I replace the REQ endpoint by a pure pyzmq version with no zmqstream
>      or
>      ioloop, it works fine ([4]http://paste.debian.net/143619/).
> 
>      Anyone can give some light on this?
> 
>      Thanks a lot!
>      drebs.
> 
>> 
>    --------------------------------------------------------------------------
> 
>      zeromq-dev mailing list
>      [5]zeromq-dev at lists.zeromq.org
>      [6]http://lists.zeromq.org/mailman/listinfo/zeromq-dev
> 
>> 
> References
> 
>    Visible links
>    1. http://mailto:drebs@riseup.net/
>    2. http://paste.debian.net/143615/
>    3. http://paste.debian.net/143617/
>    4. http://paste.debian.net/143619/
>    5. mailto:zeromq-dev at lists.zeromq.org
>    6. http://lists.zeromq.org/mailman/listinfo/zeromq-dev

> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev




More information about the zeromq-dev mailing list