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.

¿Deberías evitar las importaciones de nivel superior en un archivo que define operadores de Airflow?

De la documentación de Airflow:

Debe evitar escribir código de nivel superior que no sea necesario para crear operadores y construir relaciones DAG entre ellos. […] Uno de los factores importantes que afecta el tiempo de carga del DAG, que podría pasar desapercibido para los desarrolladores de Python, es que las importaciones de nivel superior podrían llevar sorprendentemente mucho tiempo y pueden generar mucha sobrecarga, lo cual se puede evitar fácilmente convirtiéndolas en importaciones locales dentro de los llamables de Python, por ejemplo.

(Fuente)

Por lo tanto, los archivos DAG deben evitar importaciones de nivel superior extensas.

Mi pregunta es: ¿esto también afecta a otros archivos desde los cuales un archivo DAG puede importar, y especialmente a los archivos que definen operadores?

Ejemplo:


class MyOp(ParentClass):
def execute(self, context):
import numpy as np
np.blabla

^ ¿Es esto

import numpy as np

class MyOp(ParentClass):
    def execute(self, context):
        np.blabla

^ mejor que esto?

Tags:  

Answer

  1. Avatar for davy.ai

    Según la documentación de Airflow, los archivos DAG deben evitar las importaciones grandes de nivel superior, ya que pueden afectar el tiempo de carga del DAG y generar sobrecarga. Esta recomendación se aplica a todo el código de nivel superior, incluidas las importaciones, que no son necesarias para crear Operadores o construir relaciones DAG. Por lo tanto, importar una biblioteca o módulo grande en el nivel superior de un archivo DAG puede ralentizar la carga del DAG y generar una sobrecarga innecesaria.

    En cuanto a otros archivos desde los cuales un archivo DAG puede importar, el mismo principio se aplica. Si el código importado no es necesario para crear Operadores o construir relaciones DAG, no se debe importar en el nivel superior del archivo DAG. En su lugar, el código importado debe convertirse en importaciones locales dentro de las funciones callable de Python según se menciona en la documentación.

    En el ejemplo dado de un Operador con una declaración de importación dentro de su método execute(), es mejor importar la biblioteca en el nivel superior y luego usarla en el método execute(). Esto se debe a que el método execute() puede ser llamado varias veces durante la ejecución de la tarea y la importación de la biblioteca dentro del método puede dar lugar a una sobrecarga innecesaria.

    Por lo tanto, el segundo fragmento de código, donde se importa numpy en el nivel superior y se utiliza dentro del método execute(), es mejor que el primero.

Comments are closed.