Shrinks the number of available permits by the indicated reduction. This method differs from acquire in that it
        does not block waiting for permits to become available.

        :param reduction: (int),  the number of permits to remove.

def reduce_permits(self, reduction):
        """
        Shrinks the number of available permits by the indicated reduction. This method differs from acquire in that it
        does not block waiting for permits to become available.

        :param reduction: (int),  the number of permits to remove.
        """
        check_not_negative(reduction, "Reduction cannot be negative!")
        return self._encode_invoke(semaphore_reduce_permits_codec, reduction=reduction)