בדף הזה מוסבר איך להשתמש ב-Deferred API, אחד מהשירותים המצורפים מדור קודם, עם סביבת זמן הריצה של Python 3 בסביבה הרגילה. האפליקציה יכולה לגשת לשירותים הכלולים בחבילה באמצעות App Engine services SDK for Python 3.
סקירה כללית
בעבר, חבילת ה-Deferred google.appengine.ext.deferred הייתה תלויה ב-webapp framework ב-Python 2. מאחר שהמסגרת webapp הוסרה מ-SDK של שירותי App Engine ל-Python 3, צריך לבצע כמה שינויים כשמשדרגים אפליקציית Python 2 ל-Python 3.
הפעלת Deferred API
כדי להפעיל את Deferred API ל-Python 3, כבר לא צריך להגדיר את הקובץ
builtins.deferred app.yaml.
במקום זאת, כדי להפעיל את ה-API, צריך להעביר את use_deferred=True בקריאה ל-wrap_wsgi_app().
דמיון והבדלים
כברירת מחדל, Deferred API ל-Python 3 משתמש באותה כתובת URL /_ah/queue/deferred ובאותו תור ברירת מחדל כמו ב-Python 2. שימו לב: באפליקציות שעוברות מיגרציה ל-Cloud Tasks, תור ברירת המחדל לא נוצר באופן אוטומטי וספריית המשימות שנדחות לא זמינה.
אם האפליקציה שלכם משתמשת בנקודת הקצה /_ah/queue/deferred שמוגדרת כברירת מחדל, השימוש ב-deferred.defer() ב-Python 3 נשאר זהה לשימוש ב-Python 2.
אם האפליקציה שלכם משתמשת בכתובת URL מותאמת אישית להרצת משימות שנדחות, תצטרכו לבצע כמה שינויים כי המחלקה TaskHandler במודול deferred ל-Python 2 הוסרה בגרסה של Python 3 של ה-API הזה.
כדי להגדיר כתובת URL מותאמת אישית להרצה של משימות מושהות, האפליקציה יכולה לשנות את השיטה post או את השיטה run_from_request במחלקה deferred.Handler (לשעבר deferred.TaskHandler ב-Python 2), ולהעביר את הפרמטר environ שמייצג מילון שמכיל פרמטרים של בקשת WSGI. אחר כך אפשר לקרוא לשיטה post מנקודת הקצה המותאמת אישית (כפי שמוצג בדוגמאות של Python 3).
השימוש מקצה לקצה ב-Python 3 Deferred API, כמו ניתוב בקשות וגישה למילון environ, תלוי במסגרת האינטרנט שאליה האפליקציה מועברת. משווים בין שינויי הקוד שבוצעו בדוגמה של Python 2 לבין הדוגמאות של Python 3 בקטעים הבאים.
דוגמאות ל-Python 3
בדוגמה הבאה אפשר לראות איך להריץ משימה מושהית באמצעות נקודת קצה שמוגדרת כברירת מחדל ונקודת קצה בהתאמה אישית באפליקציית Flask ובאפליקציית Django.
בקבוקון לשתייה חריפה
Django
בלי מסגרת
דוגמאות קוד
כדי לראות את דוגמאות הקוד המלאות מהמדריך הזה, אפשר לעיין ב-GitHub.