es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Generar millones de filas utilizando faker es muy lento.

Estoy intentando generar 3.3 millones de filas falsas usando Python como se muestra a continuación. Generar el archivo es muy, muy lento. ¿Alguna ayuda para acelerar esto?

Versión de Python – 3.9.7

import os, csv, time, sys
from datetime import datetime
from faker import Faker
from time import sleep
from progress.bar import Bar

os.system('clear')
sCount = "distID.in"

fake = Faker()
startTime = datetime.now()

count = sum(1 for line in open(sCount))
fakeFile = open('fakeFile.csv', 'w')
bar = Bar('Procesando', max=count)

with open(sCount) as piiFile:
    i=666000000
    for oldID in piiFile:
        i=i+1
        fn = fake.first_name()
        ln = fake.last_name()
        dob = (f'{fake.date_of_birth()}')

        fakeFile.write(f'{i},{fn},{ln},{dob},{oldID}'+ '\n')
        bar.next()

fakeFile.close()
bar.finish()
Tags:  ,

Answer

  1. Avatar for davy.ai

    Hay algunos enfoques para acelerar la generación de 3.3 millones de filas falsas utilizando Python con faker:

    1. Procesamiento por lotes: En lugar de escribir cada fila en el archivo una por una, podemos escribirlas en lotes. Por ejemplo, podemos escribir 1000 filas a la vez utilizando el siguiente fragmento de código después del bucle:
    if i % 1000 == 0:
        fakeFile.flush()
    
    1. Multihilos: Podemos ejecutar varios hilos para generar las filas en paralelo. Podemos utilizar el módulo concurrent.futures para implementar fácilmente los hilos.
    2. Usar un módulo diferente: Si el tiempo necesario para generar los datos aún no es óptimo, hay otros módulos como mimesis o pydbgen que pueden generar grandes cantidades de datos más rápidamente que faker.

    Por último, podemos considerar reducir la cantidad de filas generadas para obtener el resultado deseado dentro de un marco de tiempo específico.

Comments are closed.