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.
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 quegetData()
se ejecute antes quecheckDB()
, se puede definir la dependencia de la siguiente manera:También se puede utilizar el método
.depends_on()
para lograr el mismo resultado. Por ejemplo, para asegurarse de queupload_raw()
dependa tanto degetData()
como decheckDB()
, se puede definir la dependencia de la siguiente manera:Una vez que se han definido estas dependencias, el método
visualise()
reflejará el DAG como se espera.