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.

Planificación perfecta de tareas

Soy nuevo en Prefect, principalmente he trabajado con Airflow. He creado un flujo de trabajo que se ejecuta correctamente, pero las tareas no se ejecutan en el orden que espero. El flujo es el siguiente:

with Flow(name='4chan_extract') as flow:
    board_param = Parameter(name='board_name', required=True, default='pol')
    getData(board=board_param)
    checkDB(url='postgresql://postgres:user@localhost:5434/postgres')
    upload_raw(url="postgresql://postgres:user@localhost:5434/postgres", board=board_param)
    remove_dupes(board=board_param)

Sin embargo, cuando utilizo flow.visualise() en este flujo, el DAG se ve realmente extraño. Puedes verlo en la siguiente imagen: aquí.

Mi comprensión es que el operador de contexto with establece el orden. Sin embargo, utilizar up_stream en cada tarea no ayudó.

Se agradece cualquier ayuda.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Es importante tener en cuenta que en Prefect, las tareas se ejecutan en paralelo tanto como sea posible para optimizar la velocidad. Por lo tanto, no se garantiza que las tareas se ejecuten en el orden en que se definen en el flujo.

    Para imponer un orden de ejecución específico, se pueden usar dependencias entre tareas. En el ejemplo anterior, se pueden definir dependencias entre tareas utilizando el método .set_upstream(). Por ejemplo, para asegurarse de que getData() se ejecute antes que checkDB(), se puede definir la dependencia de la siguiente manera:

    checkDB.set_upstream(getData)
    

    También se puede utilizar el método .depends_on() para lograr el mismo resultado. Por ejemplo, para asegurarse de que upload_raw() dependa tanto de getData() como de checkDB(), se puede definir la dependencia de la siguiente manera:

    upload_raw.depends_on([getData, checkDB])
    

    Una vez que se han definido estas dependencias, el método visualise() reflejará el DAG como se espera.

Comments are closed.