class LaunchFunctor: def __init__(self, data_dir, initial_time, time_step, max_chunk_size): self.data_parser = DataParser(data_dir, initial_time, time_step, max_chunk_size) def __call__(self, task): chunk_ind = task.chunk block_ind = task.block surf_ind = task.surface observer = task.observer surf_info = self.data_parser.parse_geometry_file(surf_ind, block_ind) gdf_info = self.data_parser.parse_data_file_chunk(surf_ind, block_ind, chunk_ind) start_time = self.data_parser.get_time_offset(surf_ind, block_ind, chunk_ind) + self.data_parser.initial_time return {'start_time': start_time, 'observer': observer, 'gdf_info': gdf_info, 'surf_info': surf_info}
class QLaunchFunctor: def __init__(self, data_dir, initial_time, time_step, max_chunk_size): self.data_parser = DataParser(data_dir, initial_time, time_step, max_chunk_size) def __call__(self, task_seq, queue): grouped_task_seq = task_seq['observer'].groupby([task_seq.block, task_seq.chunk, task_seq.surface]) for (block_ind, chunk_ind, surf_ind), observer_series in grouped_task_seq: surf_info = self.data_parser.parse_geometry_file(surf_ind, block_ind) gdf_info = self.data_parser.parse_data_file_chunk(surf_ind, block_ind, chunk_ind) start_time = self.data_parser.get_time_offset(surf_ind, block_ind, chunk_ind) + \ self.data_parser.initial_time for observer in observer_series: task = {'block_ind': block_ind, 'surf_ind': surf_ind, 'chunk_ind': chunk_ind, 'start_time': start_time, 'observer': observer, 'gdf_info': gdf_info, 'surf_info': surf_info} queue.put(task)