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