पाठ 14 / 25
Sensors और Deferrable Operators
Worker slots बर्बाद किए बिना files, partitions या बाहरी घटनाओं का इंतज़ार करें।
कुशलता से इंतज़ार
Sensor ऐसा task है जो शर्त सही होने तक इंतज़ार करता है: object storage में कोई file आना, table partition मौजूद होना, बाहरी API का "ready" लौटाना। poke mode में वह बार-बार जाँचते समय worker slot रोके रखता है; reschedule mode में जाँचों के बीच slot खाली करता है। सबसे अच्छा, कई sensors deferrable हैं: वे इंतज़ार हल्के triggerer process को asyncio से सौंप देते हैं, लगभग कोई worker संसाधन नहीं लेते, इसलिए हज़ारों एक साथ इंतज़ार कर सकते हैं। हमेशा timeout रखें ताकि कभी सफल न होने वाला sensor हमेशा इंतज़ार करने की जगह आख़िरकार विफल हो।
Timeout वाला sensor
उदाहरण; Amazon provider और AWS connection चाहिए। 6 घंटे तक इंतज़ार करता है, हर 5 मिनट जाँचता है और worker नहीं रोकता।
from airflow.providers.amazon.aws.sensors.s3 import S3KeySensor
wait_for_file = S3KeySensor(
task_id="wait_for_file",
bucket_name="lake",
bucket_key="incoming/orders_{{ ds }}.csv",
aws_conn_id="aws_default",
poke_interval=300, # seconds between checks
timeout=6 * 60 * 60, # give up after 6 hours
mode="reschedule", # free the worker slot between checks
# deferrable=True, # even lighter: uses the triggerer
)हो सके तो event-driven चुनें
उत्पादक आपको सूचित कर सके (जैसे आपका DAG trigger करके या Asset अपडेट करके) तो यह polling से अधिक कुशल और तेज़ है। Sensors तब उपयोग करें जब आप सिर्फ़ दुनिया को देख सकें।
त्वरित जाँच: Sensor पर timeout क्यों रखें?
- यह DAG हटाता है
- Timeouts sensors को तेज़ बनाते हैं
- Sensors को यह वाक्य-रचना के लिए चाहिए
- ताकि शर्त कभी सही न हो तो वह हमेशा इंतज़ार करने की जगह विफल हो
Answer
ताकि शर्त कभी सही न हो तो वह हमेशा इंतज़ार करने की जगह विफल हो — सीमित इंतज़ार चुप, अनिश्चितकालीन अटकाव रोकता है।