def METHOD_NAME(self):
    # get common voxel size of inputs, or None if they differ
    common_voxel_size = None
    for key in self.inputs.values():
        if not isinstance(key, ArrayKey):
            continue
        voxel_size = self.spec[key].voxel_size
        if common_voxel_size is None:
            common_voxel_size = voxel_size
        elif common_voxel_size != voxel_size:
            common_voxel_size = None
            break
    # announce provided outputs
    for key in self.outputs.values():
        if key in self.array_specs:
            spec = self.array_specs[key].copy()
        else:
            spec = ArraySpec()
        if spec.voxel_size is None and not spec.nonspatial:
            assert common_voxel_size is not None, (
                "There is no common voxel size of the inputs, and no "
                "ArraySpec has been given for %s that defines "
                "voxel_size." % key
            )
            spec.voxel_size = common_voxel_size
        if spec.interpolatable is None:
            # default for predictions
            spec.interpolatable = False
        self.provides(key, spec)
    if self.spawn_subprocess:
        # start prediction as a producer pool, so that we can gracefully
        # exit if anything goes wrong
        self.worker = ProducerPool([self.__produce_predict_batch], queue_size=1)
        self.batch_in = multiprocessing.Queue(maxsize=1)
        self.batch_in_lock = multiprocessing.Lock()
        self.batch_out_lock = multiprocessing.Lock()
        self.worker.start()