पाठ 20 / 25
Concurrency, Pools और Priorities
साझा systems की रक्षा के लिए parallelism सीमित करें और महत्वपूर्ण काम को प्राथमिकता दें।
Database पर भगदड़ न मचाएँ
Airflow एक साथ कई tasks चला सकता है, जो किसी स्रोत database या API पर बोझ डाल सकता है। इसे कई स्तरों पर नियंत्रित करें: max_active_runs (एक DAG के समवर्ती runs), max_active_tasks (DAG के भीतर समवर्ती tasks), parallelism (वैश्विक सीमा), और pools, slots के नामित समूह। किसी एक नाज़ुक system को छूने वाले सारे tasks को, मान लें, 3 slots वाले pool में रखें; अतिरिक्त tasks queue में इंतज़ार करते हैं। Slots कम हों तो priority_weight महत्वपूर्ण tasks को पहले जाने देता है।
Task में pool, और विचार अंकों में
Task कोड एक pool देता है। उसके बाद का छोटा मॉडल (यहाँ चलाया) 3 slots वाला pool दिखाता है जिसमें 3 चल रहे हैं और 2 queue में हैं।
# in the DAG:
# BashOperator(task_id="export_a", bash_command="...", pool="source_db", priority_weight=5)
pool = 3; running = ["a", "b", "c"]; queued = ["d", "e"]
print(f"running {len(running)}/{pool}, queued {len(queued)}")
Output:
running 3/3, queued 2
Pools code review में बनाएँ
Pool के नाम और आकार को डिज़ाइन का हिस्सा मानें: दस्तावेज़ीकृत करें कि हर एक किस system की रक्षा करता है, और उनमें बदलावों की किसी अन्य configuration की तरह समीक्षा करें।
त्वरित जाँच: Pool क्या करता है?
- XComs रखता है
- सीमित करता है कि एक साझा संसाधन को एक साथ कितने tasks उपयोग करें
- Connections encrypt करता है
- DAGs का नाम बदलता है
Answer
सीमित करता है कि एक साझा संसाधन को एक साथ कितने tasks उपयोग करें — Pools DAGs भर में सीमित संसाधन का समवर्ती उपयोग सीमित करते हैं।