पाठ 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 भर में सीमित संसाधन का समवर्ती उपयोग सीमित करते हैं।