Colton
05/21/2024, 9:24 PMMarvin
05/21/2024, 9:25 PMtask_run_name
parameter when defining your task.
Here are examples to guide you:
1. Basic Dynamic Name:
python
import datetime
from prefect import flow, task
def generate_task_name():
date = datetime.datetime.now(datetime.timezone.utc)
return f"{date:%A}-is-a-lovely-day"
@task(name="My Example Task", description="An example task for a tutorial.", task_run_name=generate_task_name)
def my_task(name):
pass
@flow
def my_flow():
# Creates a run with a name like "Thursday-is-a-lovely-day"
my_task(name="marvin")
my_flow()
2. Dynamic Name with Task Information:
python
from prefect import flow, task
from prefect.runtime import flow_run, task_run
def generate_task_name():
flow_name = flow_run.flow_name
task_name = task_run.task_name
parameters = task_run.parameters
name = parameters["name"]
limit = parameters["limit"]
return f"{flow_name}-{task_name}-with-{name}-and-{limit}"
@task(name="my-example-task", description="An example task for a tutorial.", task_run_name=generate_task_name)
def my_task(name: str, limit: int = 100):
pass
@flow
def my_flow(name: str):
# Creates a run with a name like "my-flow-my-example-task-with-marvin-and-100"
my_task(name=name)
my_flow(name="marvin")
These examples show how you can dynamically assign names to task runs based on the current date or the input arguments of the task. You can customize the function to include other relevant details as needed.
For further reference, you can check the Prefect tasks documentation.Colton
05/23/2024, 6:53 PMMarvin
05/23/2024, 6:53 PMgenerate_task_name
function and use it in your Prefect tasks. Here’s how you might achieve that:
1. Define a Universal generate_task_name
Function:
python
from prefect import flow, task
from prefect.runtime import task_run
def get_arg_value_from_task(arg_name):
parameters = task_run.parameters
return parameters[arg_name]
def generate_task_name():
dataset_name = get_arg_value_from_task("dataset_name")
return f"Refresh QS dataset: {dataset_name}"
2. Use it in Your Task Definition:
python
@task(name='refreshSpiceLayer', task_run_name=generate_task_name)
def refresh_spice_layer(dataset_name):
pass
3. Create and Run Your Flow:
python
@flow
def my_flow(dataset_name: str):
refresh_spice_layer(dataset_name=dataset_name)
my_flow(dataset_name="example_dataset")
This setup should dynamically generate a task name based on the argument values. Note that the task_run.parameters
object provides access to the parameters passed to the current task run.
Here is a summary of the necessary documentation references:
- Prefect Tasks
- Prefect Runtime
These resources provide further details on defining tasks, accessing runtime variables, and dynamic task naming.