📖 Scenario: You are working with Apache Airflow to automate workflows. Sometimes, one task needs to send information to another task. Airflow uses a feature called XCom (short for cross-communication) to pass small pieces of data between tasks.Imagine you are baking a cake with friends. One friend mixes the batter and passes it to another friend to bake. XCom is like passing the batter between friends so the next step can continue.
🎯 Goal: Build a simple Airflow DAG with two tasks where the first task sends a message using XCom, and the second task receives and prints that message.
📋 What You'll Learn
Create a DAG with two PythonOperator tasks
Use XCom to push a message from the first task
Use XCom to pull the message in the second task
Print the received message in the second task
💡 Why This Matters
🌍 Real World
In real workflows, tasks often need to share results or parameters. XCom makes this easy and automatic.
💼 Career
Understanding XCom is essential for Airflow users and DevOps engineers to build reliable, connected workflows.
Progress0 / 4 steps
1
Create the DAG and first task to push a message
Create a DAG called xcom_example_dag with default arguments. Define a Python function called push_message that uses kwargs['ti'].xcom_push(key='message', value='Hello from task 1') to send the message. Create a PythonOperator task called task_push that runs push_message inside the DAG.
Apache Airflow
Hint
Remember to import DAG and PythonOperator. Use kwargs['ti'].xcom_push inside the push_message function.
2
Add the second task to pull the message
Define a Python function called pull_message that uses message = kwargs['ti'].xcom_pull(task_ids='task_push', key='message') to get the message. Create a PythonOperator task called task_pull that runs pull_message inside the same DAG.
Apache Airflow
Hint
Use kwargs['ti'].xcom_pull to get the message from task_push. Then print it.
3
Set task dependencies to run pull after push
Set the task order so that task_pull runs after task_push by writing task_push >> task_pull inside the DAG.
Apache Airflow
Hint
Use the bitshift operator >> to set the order of tasks.
4
Run the DAG and observe the output
Run the DAG and observe the output of task_pull. It should print Received message: Hello from task 1.
Apache Airflow
Hint
Run the DAG in Airflow UI or CLI and check the logs of task_pull to see the printed message.
Practice
(1/5)
1. What is the main purpose of XCom in Airflow?
easy
A. To store large files generated by tasks
B. To schedule tasks at specific times
C. To monitor the health of Airflow workers
D. To enable tasks to share small pieces of data between each other
Solution
Step 1: Understand XCom's role in Airflow
XCom is designed to let tasks exchange small data easily during a workflow.
Step 2: Compare options with XCom's purpose
Scheduling tasks, monitoring workers, or storing large files are not XCom's functions.
Final Answer:
To enable tasks to share small pieces of data between each other -> Option D
Quick Check:
XCom = task data sharing [OK]
Hint: XCom is for small data sharing between tasks [OK]
Common Mistakes:
Confusing XCom with scheduling features
Thinking XCom stores large files
Mixing XCom with monitoring tools
2. Which Airflow method is used to send data from one task to another using XCom?
easy
A. xcom_pull()
B. xcom_push()
C. send_data()
D. push_xcom()
Solution
Step 1: Identify the method to send data in XCom
The method to send data is called xcom_push().
Step 2: Verify other options
xcom_pull() is for receiving data, and the others are not valid Airflow methods.
Final Answer:
xcom_push() -> Option B
Quick Check:
Send data = xcom_push() [OK]
Hint: Push data with xcom_push(), pull with xcom_pull() [OK]
Common Mistakes:
Confusing xcom_push() with xcom_pull()
Using non-existent methods like send_data()
Mixing method names
3. Given the following code snippet in Airflow tasks:
A. xcom_pull requires a different method signature
B. The task_ids parameter is incorrect
C. The key used in xcom_pull does not match the key used in xcom_push
D. xcom_push cannot send strings
Solution
Step 1: Compare keys used in push and pull
task_a pushes with key 'data', but task_b pulls with key 'result'. This mismatch causes None to be returned.
Step 2: Verify other parameters
task_ids is correct, xcom_push supports strings, and method signature is valid.
Final Answer:
The key used in xcom_pull does not match the key used in xcom_push -> Option C
Quick Check:
Matching keys needed for XCom data [OK]
Hint: Keys must match exactly in push and pull [OK]
Common Mistakes:
Ignoring key name mismatch
Assuming xcom_push can't send strings
Changing task_ids unnecessarily
5. You want to pass a list of numbers from task_a to task_b using XCom. Which approach correctly enables this communication?
hard
A. In task_a: ti.xcom_push(key='numbers', value=[1, 2, 3]) In task_b: nums = ti.xcom_pull(key='numbers', task_ids='task_a')
B. In task_a: ti.xcom_push(key='numbers', value='1,2,3') In task_b: nums = ti.xcom_pull(key='numbers', task_ids='task_b')
C. In task_a: ti.xcom_push(key='data', value=[1, 2, 3]) In task_b: nums = ti.xcom_pull(key='numbers', task_ids='task_a')
D. In task_a: ti.xcom_push(value=[1, 2, 3]) In task_b: nums = ti.xcom_pull(key='numbers', task_ids='task_a')
Solution
Step 1: Check key and value consistency
In task_a: ti.xcom_push(key='numbers', value=[1, 2, 3]) In task_b: nums = ti.xcom_pull(key='numbers', task_ids='task_a') uses the same key 'numbers' in push and pull, and passes a list correctly.
Step 2: Verify task_ids and value types
Other options fail: one pushes a string '1,2,3' instead of list and pulls from wrong task_id 'task_b'; another mismatches keys 'data' vs 'numbers'; another omits key in push (defaults to 'return_value') but uses key='numbers' in pull.
Final Answer:
In task_a: ti.xcom_push(key='numbers', value=[1, 2, 3]) In task_b: nums = ti.xcom_pull(key='numbers', task_ids='task_a') -> Option A
Quick Check:
Matching keys and task_ids with correct value type [OK]
Hint: Use same key and task_id, push list directly [OK]
Common Mistakes:
Mismatching keys between push and pull
Pulling from wrong task_id
Omitting key parameter in push or pull
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.