code: def submit(self, func, *args, **kwargs):
          
          task_id = uuid.uuid4()
  
          logger.debug("Pushing function {} to queue with args {}".format(func, args))
  
          self.tasks[task_id] = Future()
  
          fn_buf = pack_apply_message(func, args, kwargs,
                                      buffer_threshold=1024 * 1024,
                                      item_threshold=1024)
  
          msg = {"task_id": task_id,
                 "buffer": fn_buf}
  
          # Post task to the the outgoing queue
          self.outgoing_q.put(msg)
  
          # Return the future
          return self.tasks[task_id]
docs: Submits work to the the outgoing_q.
  
          The outgoing_q is an external process listens on this
          queue for new work. This method is simply pass through and behaves like a
          submit call as described here `Python docs: <https://docs.python.org/3/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor>`_
  
          Args:
              - func (callable) : Callable function
              - *args (list) : List of arbitrary positional arguments.
  
          Kwargs:
              - **kwargs (dict) : A dictionary of arbitrary keyword args for func.
  
          Returns:
                Future