class_docstr: The ZMQ socket object
  
  To create a Socket, first create a Context::
  
      ctx = zmq.Context.instance()
  
  then call ``ctx.socket(socket_type)``::
  
      s = ctx.socket(zmq.ROUTER)
class_docstr_tok: ["The","ZMQ","socket","object","To","create","a","Socket",",","first","create","a","Context",":",":","ctx","=","zmq.Context.instance","(",")","then","call","``","ctx.socket","(","socket_type",")","``",":",":","s","=","ctx.socket","(","zmq.ROUTER",")"]
docstr: 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
      Any valid flags for :func:`Socket.send`.
      SNDMORE is added automatically for frames before the last.
  copy : bool, optional
      Should the frame(s) be sent in a copying or non-copying manner.
      If copy=False, frames smaller than self.copy_threshold bytes
      will be copied anyway.
  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.
docstr_tok: ["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","Any","valid","flags","for",":","func",":","`","Socket.send","`",".","SNDMORE","is","added","automatically","for","frames","before","the","last",".","copy",":","bool",",","optional","Should","the","frame","(","s",")","be","sent","in","a","copying","or","non-copying","manner",".","If","copy=False",",","frames","smaller","than","self.copy_threshold","bytes","will","be","copied","anyway",".","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","."]
code: def send_multipart(
      self, msg_parts, flags=0, copy=True, track=False, **kwargs
  ):
      """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
          Any valid flags for :func:`Socket.send`.
          SNDMORE is added automatically for frames before the last.
      copy : bool, optional
          Should the frame(s) be sent in a copying or non-copying manner.
          If copy=False, frames smaller than self.copy_threshold bytes
          will be copied anyway.
      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.
      """
      # typecheck parts before sending:
      for i, msg in enumerate(msg_parts):
          if isinstance(msg, (zmq.Frame, bytes, memoryview)):
              continue
          try:
              memoryview(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)
      # Send the last part without the extra SNDMORE flag.
      return self.send(msg_parts[-1], flags, copy=copy, track=track)
  
imports: import errno
  import random
  import sys
  import warnings
  import zmq
  from zmq.backend import Socket
  from .poll import Poller
  from .None import constants
  from .attrsettr import AttributeSetter
  from zmq.error import ZMQError, ZMQBindError
  from zmq.utils import jsonapi
  from zmq.utils.strtypes import bytes, unicode, basestring
  from .constants import SNDMORE, ENOTSUP, POLLIN, int64_sockopt_names, int_sockopt_names, bytes_sockopt_names, fd_sockopt_names
label_desc: Use image node_id 20 for calling the Socket obj's underlying member method code with example usage: obj.send_multipart(msg_parts, flags, copy, track) and returns: self