'send a sequence of buffers as a multipart message
The zmq.SNDMORE flag is added to all msg parts before the last.
Parameters
msg_parts : iterable
A sequence of objects to send as a multipart message. Each element
can be any sendable object (Frame, bytes, buffer-providers)
flags : int, optional
SNDMORE is handled automatically for frames before the last.
copy : bool, optional
Should the frame(s) be sent in a copying or non-copying manner.
track : bool, optional
Should the frame(s) be tracked for notification that ZMQ has
finished with it (ignored if copy=True).
Returns
None : if copy or not track
MessageTracker : if track and not copy
a MessageTracker object, whose `pending` property will
be True until the last send is completed.'

def send_multipart(self, msg_parts, flags=0, copy=True, track=False):

    for (i, msg) in enumerate(msg_parts):
        if isinstance(msg, (zmq.Frame, bytes, _buffer_type)):
            continue
        try:
            _buffer_type(msg)
        except Exception:
            rmsg = repr(msg)
            if (len(rmsg) > 32):
                rmsg = (rmsg[:32] + '...')
            raise TypeError(('Frame    %i    (%s)    does    not    support    the    buffer    interface.' % (i, rmsg)))
    for msg in msg_parts[:(-1)]:
        self.send(msg, (SNDMORE | flags), copy=copy, track=track)
    return self.send(msg_parts[(-1)], flags, copy=copy, track=track)
