code: def enqueue_or_ignore(self, function, name=None, times=1, data=None):
          
          self._check_if_ready()
          return self.main_loop.enqueue_or_ignore(function, name, times, data)
docs: Like enqueue(), but does nothing if a function with the same name
          is already in the queue.
          Returns a job id if a new job was added, returns None otherwise.
  
          :type  function: callable
          :param function: The function that is executed.
          :type  name: str
          :param name: Stored in Job.name.
          :type  times: int
          :param times: The maximum number of attempts.
          :type  data: object
          :param data: Optional data to store in Job.data.
          :rtype:  int or None
          :return: The id of the new job.