인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

kosa.share05님의 프로필 이미지

작성한 질문수

Airflow 마스터 클래스

Bash Operator에서 Jinja 템플릿 사용하기

질문드립니다 4~5강

해결된 질문

작성

·

48

0

op_args와 op_kwargs 등 파라미터를 전달하는 함수를 사용할 때 task 파라미터를 사용해서 하는 방법은 따로 설명이 없는데

이렇게 함수에 파라미터를 전달해서 사용할 때는 파이썬오퍼레이터를 항상 써야만하는 건가요?

 

답변 3

1

김현진님의 프로필 이미지
김현진
지식공유자

안녕하세요 kosa.share05 님

 

섹션 4-3. @task 데코레이터 사용하기 부분에서 아래 부분을 설명드린 게 있습니다 (아래 캡처)

image.png

 

여기서 보시면 함수에 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

kosa.share05님의 프로필 이미지
kosa.share05
질문자

답변감사합니다

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다.

kosa.share05님, Airflow에서 파라미터를 전달하는 방법에 대한 질문을 주셨군요.

Airflow에서 파라미터를 전달하는 방법 중 하나는 op_argsop_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_argsop_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 객체를 반환하는지 설명하고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.