def manejar_video(self, video, socket): if (len(self) == 0): print("No hay ningun servidor de procesamiento registrado") return video_name = GetName() video_file = open(f'Videos/{video_name}.mp4', 'wb') video_file.write(video) Images.VideoToImage(f'Videos/{video_name}.mp4', video_name) frames = [] for item in os.listdir(f'Images{video_name}/'): if (os.path.isfile(f"Images{video_name}/{item}")): frames.append(item) images_to_share = math.floor(len(frames) / len(self)) + 1 shared_images = 0 for i in range(len(self)): if (i != len(self) - 1): print( f"Enviando al servidor {i} para que procese imagenes del {shared_images + 1} a {shared_images + images_to_share}" ) shared_images += images_to_share else: print( f"Enviando al servidor {i} para que procese imagenes del {shared_images + 1} a {len(frames) - 1}" ) socket.send(b'{"type": "VIDEO_COMPLETE"}')
def manejar_video(self, video, socket): if (len(self) == 0): print("No hay ningun servidor de procesamiento registrado") return video_name = GetName() video_file = open(f'Videos/{video_name}.mp4', 'wb') video_file.write(video) frames = Images.VideoToImage(f'Videos/{video_name}.mp4', video_name) - 1 images_to_share = math.floor(frames / len(self)) shared_images_counter = 0 shared_images = [] result_images = [] process_pool = multiprocessing.Pool(len(self)) processes = [] available_servers = multiprocessing.Queue(len(self)) for server in self.servidores_procesamiento: available_servers.put(server) for i in range(len(self)): if (i == len(self) - 1): shared_images_struct = ImagenesCompartidas( [shared_images_counter + 1, frames], f'Images{video_name}') else: shared_images_struct = ImagenesCompartidas([ shared_images_counter + 1, shared_images_counter + images_to_share ], f'Images{video_name}') shared_images.append(shared_images_struct) shared_images_counter += images_to_share for struct in shared_images: servidor_asignado = available_servers.get() process = process_pool.apply_async(self.EnviarAProcesar, (struct, servidor_asignado)) processes.append(process) for process in processes: try: result_structure = process.get(1000) if (not result_structure): raise Exception( 'Los servidores no pudieron terminar de procesar las imagenes' ) if (isinstance(result_structure, ImagenesCompartidas)): result_images.append(result_structure) else: raise Exception( 'Los servidores no pudieron terminar de procesar las imagenes' ) except Exception as e: self.servidores_procesamiento.remove(e.args[0]) print(f"El servidor {e} no está disponible") socket.send(b'{"type": "END_ERROR", "message": ""}') return for result in result_images: contador = 0 for i in range(result.img_range[0], result.img_range[1] + 1): image = open(f'Images{video_name}/{i + 1}.jpg', 'wb') image.write(result.imagenes[contador]) image.close() contador += 1 CreateVideo(f'Images{video_name}') filtered_video = open(f'Images{video_name}video.mp4', 'rb').read() socket.send(b'{"type": "VIDEO_COMPLETE"}') socket.send(filtered_video) self.CleanUp(video_name)