def METHOD_NAME(self):
    pool = multiprocessing.Pool(self.processes)
    results = []
    for file_name in self.split_files:
        result = pool.apply_async(
            import_single_file, (file_name, self.table_name, self.database)
        )
        results.append(result)
    pool.close()
    while True:
        time.sleep(1)
        # catch exception if results are not ready yet
        self.cursor.execute(
            f"select SUM(bytes_processed) / {APPROX_ADDRESS_BASE_BYTES} from pg_stat_progress_copy;"
        )
        self.stdout.write(f"Rough % done: {self.cursor.fetchone()}")
        ready = [result.ready() for result in results]
        successful = [result.successful() for result in results if result.ready()]
        self.stdout.write(f"{ready=}")
        self.stdout.write(f"{successful=}")
        # exit loop if all tasks returned success
        if len(successful) == self.processes and all(successful):
            break
        # raise exception reporting exceptions received from workers
        if len(successful) == self.processes:
            raise Exception(
                f"Workers raised following exceptions {[result._value for result in results if not result.successful()]}"
            )