# Sensors और Deferrable Operators — Apache Airflow: Data Pipelines का Orchestration

Source: https://www.geekswithgeeks.com/hi/airflow/flow-sensors

> 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 नहीं रोकता।

```python
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 तब उपयोग करें जब आप सिर्फ़ दुनिया को देख सकें।

**Quiz:** Sensor पर timeout क्यों रखें?

- [ ] यह DAG हटाता है
- [ ] Timeouts sensors को तेज़ बनाते हैं
- [ ] Sensors को यह वाक्य-रचना के लिए चाहिए
- [x] ताकि शर्त कभी सही न हो तो वह हमेशा इंतज़ार करने की जगह विफल हो

*Answer:* ताकि शर्त कभी सही न हो तो वह हमेशा इंतज़ार करने की जगह विफल हो. सीमित इंतज़ार चुप, अनिश्चितकालीन अटकाव रोकता है।
