בדף הזה מוסבר איך להשתמש ב-Deferred API, אחד מהשירותים המצורפים מדור קודם, עם סביבת זמן הריצה של Python 3 עבור הסביבה הרגילה. האפליקציה יכולה לגשת לשירותים המצורפים דרך App Engine services SDK for Python 3.
סקירה כללית
בעבר, חבילת ההשהיה 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 file. במקום זאת, כדי להפעיל את ה-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.