해결된 질문
작성
·
48
답변 3
1
안녕하세요 kosa.share05 님
섹션 4-3. @task 데코레이터 사용하기 부분에서 아래 부분을 설명드린 게 있습니다 (아래 캡처)
여기서 보시면 함수에 op_args 나 **kwargs 파라미터를 정의하지 않고 some_input 이라는 파라미터만 명시했습니다. 그러나 **kwargs 파라미터를 정의해도 됩니다.
즉 함수 정의를 아래처럼 하시고
@task(...)
def print_context(**kwargs):
user_msg = kwargs.get('user_msg')
순서를 만들 때 아래처럼 호출하시면 됩니다.
python_task_1 = print_context(user_msg='task_decorator 실행')
그럼 user_msg 라는 키와 "task_decorator 실행" 이라는 value가 kwargs에 전달됩니다.
그리고 user_msg 말고 다른 입력 파라미터 더 만들어서 던져도 됩니다.
그러면 kwargs(딕셔너리) 에서 추출해서 사용할 수 있습니다.
이해 되셨을까요?
그리고 그 뒤에 이어지는 강의를 보시면 context 변수에 접근하기 위해 @task 데코레이터를 적용한 함수에 **kwargs 를 사용하고 있는 걸 볼 수 있을꺼에요. 따라서 위에서 설명드린대로 @task 데코레이터 적용한 함수 호출 시 함수명(key1=value1, key2=value2) 이런식으로 호출하면 모두 kwargs에 들어옵니다.
0
0
안녕하세요, 인프런 AI 인턴입니다.
kosa.share05님, Airflow에서 파라미터를 전달하는 방법에 대한 질문을 주셨군요.
Airflow에서 파라미터를 전달하는 방법 중 하나는 op_args
와 op_kwargs
를 사용하는 것입니다. 이것은 PythonOperator
를 사용할 때 일반적으로 사용되며, 이는 Python 함수를 실행하면서 인자를 전달할 수 있는 기능을 제공합니다.
@task
데코레이터를 활용하는 경우에는 함수 호출 시 인자를 직접 전달할 수 있는데, 이 방식은 PythonOperator
사용 시와는 약간 다릅니다. @task
데코레이터는 데코레이터의 특성을 활용하여 함수 호출 시에 바로 Task 객체를 반환하며, 이때도 인자를 전달할 수 있습니다.
예를 들어, 아래와 같이 @task
데코레이터를 사용하는 것이 가능합니다:
@task
def my_function(param1, param2):
# Your task logic here
pass
my_task = my_function(10, 20)
반면, PythonOperator
를 사용할 때는 python_callable
속성과 함께 op_args
나 op_kwargs
를 통해 인자를 전달합니다:
def my_function(param1, param2):
# Your task logic here
pass
my_task = PythonOperator(
task_id='my_task',
python_callable=my_function,
op_args=[10, 20],
# 또는 op_kwargs={"param1": 10, "param2": 20}
)
@task
데코레이터는 간편한 구문을 제공하여 더 자연스러운 Python 코드 스타일로 작업할 수 있게 해주는 장점이 있습니다. 따라서, 반드시 PythonOperator
를 사용할 필요는 없으며, @task
데코레이터와 함께 파라미터를 다루는 것도 충분히 좋은 방법입니다.
이와 관련하여, Airflow에서 @task
데코레이터의 사용에 대해 설명된 게시물을 참고하실 수 있습니다. 해당 게시물에서는 @task
데코레이터가 함수 호출 시 어떤 식으로 Task 객체를 반환하는지 설명하고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.