Actualmente estoy escribiendo un script de Python para procesar aproximadamente unos 10.000 documentos de entrada. Basado en el resultado del progreso del script, noto que los primeros 400+ documentos se procesan muy rápido y luego el script se ralentiza aunque todos los documentos de entrada son aproximadamente del mismo tamaño.Manera pitónica y eficiente de definir expresiones regulares múltiples para su uso en muchas iteraciones
Supongo que esto puede tener que ver con el hecho de que la mayor parte del procesamiento de documentos se realiza con expresiones regulares que no guardo como objetos de expresiones regulares una vez que se han compilado. En cambio, recompilo las expresiones regulares cada vez que las necesito.
Dado que mi script tiene alrededor de 10 funciones diferentes, todas usan entre 10 y 20 patrones de expresiones regulares diferentes. Me pregunto cuál sería una forma más eficiente en Python para evitar volver a compilar los patrones de expresiones regulares una y otra vez (en Perl Podría simplemente incluir un modificador //o
).
Mi suposición es que si almacenar los objetos de expresiones regulares en las funciones individuales utilizando
pattern = re.compile()
el objeto regex resultante no será retenido hasta la siguiente invocación de la función para la siguiente iteración (cada función se llama pero una vez por documento).
Crear una lista global de expresiones regulares pre compiladas parece una opción poco atractiva ya que necesitaría almacenar la lista de expresiones regulares en una ubicación diferente en mi código que donde realmente se usan.
¿Alguna sugerencia aquí sobre cómo manejar esto de forma clara y eficiente?
No, tiene que ver con el hecho de que * su caché está agotada *. –
¿Ha perfilado su código? – Daenyth
son todas las funciones aplicadas a todos los documentos? porque si es así, la respuesta de @larsmans, aunque es buena, no parece explicar la desaceleración después de 400 documentos. Sugeriría crear perfiles en lugar de adivinar ... –