Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

156
Vistas
¿Cómo mejorar el rendimiento de la conversión de datos al formato json?

Tengo el siguiente código para convertir datos (datos de fila de postgress) a json. Usualmente len(data) = 100 000

 def convert_to_json(self, data): s3 = self.session.client('s3') infos = { 'videos':[], 'total_count': len(data) } for row in data: video_id = row[0] url = s3.generate_presigned_url( ClientMethod='get_object', Params={ 'Bucket': '...', 'Key': '{}.mp4'.format(video_id) } ) dictionary = { 'id': video_id, 'location': row[1], 'src': url } infos['videos'].append(dictionary) return json.dumps(infos)

Gracias por cualquier idea.

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

La mayor parte del tiempo en su programa probablemente se desperdicia esperando a la red. De hecho, llama a s3.generate_presigned_url , que enviará una solicitud a Amazon y luego tendrá que esperar hasta que el servidor finalmente responda. Mientras tanto, no hay mucho procesamiento que pueda hacer.

Entonces, el mayor potencial es acelerar el proceso haciendo solicitudes en paralelo . Entonces, envía, por ejemplo, 10 solicitudes y luego espera las 10 respuestas. Este artículo ofrece una breve introducción al respecto.

Según su pregunta y el artículo, puede usar algo como lo siguiente para acelerar el proceso:

 from multiprocessing.pool import ThreadPool # ... def fetch_generate_presigned_url(video_id) : return s3.generate_presigned_url( ClientMethod='get_object', Params={ 'Bucket': '...', 'Key': '{}.mp4'.format( video_id ) } ) def convert_to_json(self, data): pool = ThreadPool(processes=10) urls = [row[0] for row in data] video_ids = pool.map( fetch_generate_presigned_url ,urls) infos = { 'videos':[{'id': video_id,'location': row[1],'src': row[0]} for vide_id,row in zip(video_ids,data) ], 'total_count': len(data) } return json.dumps(infos)

El número de procesos, process=10 se puede establecer más alto para que las solicitudes sean más paralelas.

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda