class_docstr: This is an abstract class.  You must derive from this class, and add
  the two methods collect_incoming_data() and found_terminator()
class_docstr_tok: ["This","is","an","abstract","class",".","You","must","derive","from","this","class",",","and","add","the","two","methods","collect_incoming_data","(",")","and","found_terminator","(",")"]
code: def initiate_send(self):
      while self.producer_fifo and self.connected:
          first = self.producer_fifo[0]
          # handle empty string/buffer or None entry
          if not first:
              del self.producer_fifo[0]
              if first is None:
                  self.handle_close()
                  return
  
          # handle classic producer behavior
          obs = self.ac_out_buffer_size
          try:
              data = first[:obs]
          except TypeError:
              data = first.more()
              if data:
                  self.producer_fifo.appendleft(data)
              else:
                  del self.producer_fifo[0]
              continue
  
          if isinstance(data, str) and self.use_encoding:
              data = bytes(data, self.encoding)
  
          # send the data
          try:
              num_sent = self.send(data)
          except OSError:
              self.handle_error()
              return
  
          if num_sent:
              if num_sent < len(data) or obs < len(first):
                  self.producer_fifo[0] = first[num_sent:]
              else:
                  del self.producer_fifo[0]
          # we tried to send some actual data
          return
  
imports: import asyncore
  from collections import deque
  from warnings import _deprecated
label_desc: Use image node_id 16 for calling the async_chat obj's underlying member method code with example usage: obj.initiate_send() without return types