def enqueue_or_ignore(self, function, name=None, times=1, data=None):
        """
        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.
        """
        self._check_if_ready()
        return self.main_loop.enqueue_or_ignore(function, name, times, data)