<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def save_data(self, *, data_filter=None, redownload=False, max_threads=None, raise_download_errors=False):
 """ Saves data to disk. If ``redownload=True`` then the data is redownloaded using ``max_threads`` workers. :param data_filter: Used to specify which items will be returned by the method and in which order. E.g. with `data_filter=[0, 2, -1]` the method will return only 1st, 3rd and last item. Default filter is ``None``. :type data_filter: list(int) or None :param redownload: data is redownloaded if ``redownload=True``. Default is ``False`` :type redownload: bool :param max_threads: number of threads to use when downloading data; default is ``max_threads=None`` which by default uses the number of processors on the system :type max_threads: int :param raise_download_errors: If ``True`` any error in download process should be raised as ``DownloadFailedException``. If ``False`` failed downloads will only raise warnings. :type raise_download_errors: bool """

        self._preprocess_request(True, False)
        self._execute_data_download(data_filter, redownload, max_threads, raise_download_errors)