docs: def submit(self, *args, func=None, monitor=None):
          """
          Submit the given arguments to the underlying task
          """
          monitor = monitor or self.monitor
          func = func or self.task_func
          if not hasattr(self, 'socket'):  # first time
              self.__class__.running_tasks = self.tasks
              self.socket = Socket(self.receiver, zmq.PULL, 'bind').__enter__()
              monitor.backurl = 'tcp://%s:%s' % (
                  config.dbserver.host, self.socket.port)
          assert not isinstance(args[-1], Monitor)  # sanity check
          dist = 'no' if self.num_tasks == 1 else self.distribute
          if dist != 'no':
              args = pickle_sequence(args)
              self.sent += numpy.array([len(p) for p in args])
          res = submit[dist](self, func, args, monitor)
          self.tasks.append(res)