RU EN HE
אודות פרויקטים בלוג
← חזרה לבלוג
אוטומציה ואינטגרציה ב-Python

בניית Dispatcher קונטיינרים אוניברסלי ב-Python

מבוא

כשמבצעים אוטומציה של משימות הטרוגניות, נוצרת תבנית נפוצה שבה עובד Python צריך להפעיל קונטיינרים שונים בהתאם לסוג המשימה. במקום לקודד כל קונטיינר, אנחנו יוצרים dispatcher אוניברסלי המונע על ידי תצורת YAML.

תצורת YAML עם סעיף Runners

כל ניתוב המשימות מוגדר בקובץ config.yaml. כל runner ממופה לתמונת קונטיינר, פקודה, ארגומנטי Podman ו-timeout. הוספת סוג משימה חדש דורשת רק הוספת ערך חדש בתצורה.

מנהל הקשר EphemeralContainer

מנהל ההקשר מטפל במחזור החיים המלא של הקונטיינר — מיצירה ועד הסרה. הוא מייצר שם ייחודי לכל הרצה, מעביר נתונים דרך stdin ומבטיח ניקוי בבלוק finally.

העברת JSON דרך stdin

נתוני המשימה מסודרים ל-JSON ומועברים דרך stdin של הקונטיינר. הקונטיינר קורא stdin, מעבד את הנתונים וכותב את התוצאה ל-stdout. גישה זו מבטיחה בידוד מלא ואוניברסליות.

לכידת תוצאות מ-stdout

תוצאת העיבוד מנותחת מ-stdout של הקונטיינר. Stderr משמש ללוגים ודיבאג. בקודי החזרה שאינם אפס, נזרקת חריגה עם תוכן stderr.

טיפול בשגיאות עם בלוקי finally

בלוק ה-finally במנהל ההקשר מבטיח הסרת קונטיינר גם במהלך חריגות. זה מונע דליפת משאבים.

אינטגרציה עם RQ

המשימה האוניברסלית ל-RQ היא טריוויאלית — היא מקבלת שם runner ונתונים, טוענת את התצורה ומפעילה את הקונטיינר המתאים.

סיכום

dispatcher קונטיינרים אוניברסלי הוא פתרון אלגנטי למערכות עם משימות הטרוגניות. תצורת YAML, מנהלי הקשר והעברת נתונים דרך stdin/stdout מספקים גמישות, אמינות ובידוד ביצוע מלא.