फ़्लास्क ऐप्लिकेशन में App Engine टास्क सूची (पुश टास्क) का इस्तेमाल कैसे करें (मॉड्यूल 7)

1. खास जानकारी

कोडलैब के बिना सर्वर वाले माइग्रेशन स्टेशन की सीरीज़ (अपने हिसाब से इस्तेमाल किए जाने वाले ट्यूटोरियल) और मिलते-जुलते वीडियो का मकसद, Google Cloud के बिना सर्वर वाले डेवलपर को अपने ऐप्लिकेशन को आधुनिक बनाने में मदद करना है. ऐसा करने के लिए, उन्हें लेगसी सेवाओं का इस्तेमाल बंद करना होगा. ऐसा करने के लिए, उन्हें एक या एक से ज़्यादा माइग्रेशन में मदद मिलेगी. ऐसा करने से, आपके ऐप्लिकेशन ज़्यादा पोर्टेबल बन जाते हैं. साथ ही, आपको ज़्यादा विकल्प और सुविधाएं भी मिलती हैं. इससे, क्लाउड प्रॉडक्ट की बड़ी रेंज को इंटिग्रेट किया जा सकता है और उन्हें ऐक्सेस किया जा सकता है. साथ ही, नई भाषाओं में रिलीज़ किए जाने वाले ऐप्लिकेशन पर आसानी से अपग्रेड किया जा सकता है. शुरुआत में App Engine (स्टैंडर्ड एनवायरमेंट) वाले डेवलपर पर ध्यान दिया जाता है. हालांकि, यह सीरीज़ इतनी बड़ी है कि इसमें Cloud Functions और Cloud Run जैसे बिना सर्वर वाले प्लैटफ़ॉर्म या लागू होने पर, उन्हें शामिल किया जा सकता है.

यह कोडलैब आपको मॉड्यूल 1 कोडलैब से सैंपल ऐप्लिकेशन में, App Engine टास्क सूची के पुश टास्क का इस्तेमाल करने का तरीका सिखाता है. मॉड्यूल 7 ब्लॉग पोस्ट और वीडियो इस ट्यूटोरियल को पूरा करते हुए इस ट्यूटोरियल में मौजूद सामग्री की खास जानकारी देते हैं.

इस मॉड्यूल में, हम पुश टास्क का इस्तेमाल जोड़ेंगे. इसके बाद, हम उस इस्तेमाल को मॉड्यूल 8 में Cloud Tasks और उसके बाद के वर्शन को Python 3 में और मॉड्यूल 9 में Cloud Datastore में माइग्रेट करेंगे. पुल बनाने के लिए, टास्क की सूची का इस्तेमाल करने वाले लोग, Cloud Pub/Sub पर माइग्रेट हो जाएंगे. इसके लिए, उन्हें मॉड्यूल 18-19 के हिसाब से पढ़ना चाहिए.

आपको इनके बारे में जानकारी मिलेगी

  • App Engine Tasks क्यू एपीआई/बंडल की गई सेवा का इस्तेमाल करना
  • बेसिक Python 2 Flask App Engine NDB ऐप्लिकेशन में, पुश टास्क के इस्तेमाल की जानकारी जोड़ें

आपको इनकी ज़रूरत होगी

सर्वे

इस ट्यूटोरियल का इस्तेमाल कैसे किया जाएगा?

इसे सिर्फ़ पढ़ें इसे पढ़ें और कसरतों को पूरा करें

Python के साथ अपने अनुभव को आप कितनी रेटिंग देंगे?

शुरुआती इंटरमीडिएट कुशल

Google Cloud की सेवाएं इस्तेमाल करने का आपका अनुभव कैसा रहा?

शुरुआती इंटरमीडिएट कुशल

2. बैकग्राउंड

App Engine टास्क सूची में पुश और पुल, दोनों तरह के टास्क काम करते हैं. ऐप्लिकेशन पोर्टेबिलिटी को बेहतर बनाने के लिए, Google Cloud की टीम, 'टास्क सूची' जैसी लेगसी सेवाओं से, क्लाउड स्टैंडअलोन या तीसरे पक्ष की मिलती-जुलती सेवाओं पर माइग्रेट करने का सुझाव देती है.

पुल टास्क माइग्रेशन की सुविधा, माइग्रेशन मॉड्यूल 18 से 19 वर्शन में उपलब्ध है. वहीं, मॉड्यूल 7-9 वर्शन, पुश टास्क माइग्रेशन पर फ़ोकस करता है. App Engine टास्क सूची के पुश टास्क से माइग्रेट करने के लिए, इसके इस्तेमाल को मॉड्यूल 1 कोडलैब से मिलने वाले मौजूदा फ़्लास्क और App Engine NDB ऐप्लिकेशन में जोड़ें. उस ऐप्लिकेशन में, एक नया पेज व्यू नई विज़िट को रजिस्टर करता है और उपयोगकर्ता की सबसे हाल की विज़िट दिखाता है. पुरानी विज़िट को फिर कभी नहीं दिखाया जाता और वे Datastore में जगह लेती हैं. इसलिए, हम सबसे पुरानी विज़िट को अपने-आप मिटाने के लिए एक पुश टास्क बनाने जा रहे हैं. मॉड्यूल 8 में आगे, हम उस ऐप्लिकेशन को टास्क सूची से क्लाउड टास्क में माइग्रेट कर देंगे.

इस ट्यूटोरियल में ये चरण बताए गए हैं:

  1. सेटअप/प्रीवर्क
  2. कॉन्फ़िगरेशन अपडेट करें
  3. ऐप्लिकेशन कोड बदलें

3. सेटअप/प्रीवर्क

इस सेक्शन में, इन कामों को करने का तरीका बताया गया है:

  1. अपना क्लाउड प्रोजेक्ट सेट अप करें
  2. बेसलाइन ऐप्लिकेशन का नमूना डाउनलोड करें
  3. (फिर से) बेसलाइन ऐप्लिकेशन डिप्लॉय करना और उसकी पुष्टि करना

इन चरणों से यह पक्का होता है कि आपने सही कोड डाला है.

1. प्रोजेक्ट सेटअप करें

अगर आपने मॉड्यूल 1 कोडलैब पूरा कर लिया है, तो हमारा सुझाव है कि आप उसी प्रोजेक्ट (और कोड) का फिर से इस्तेमाल करें. इसके अलावा, नया प्रोजेक्ट बनाया जा सकता है या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल किया जा सकता है. पक्का करें कि प्रोजेक्ट में एक चालू बिलिंग खाता हो और App Engine चालू हो.

2. बेसलाइन ऐप्लिकेशन का नमूना डाउनलोड करें

इस कोडलैब के लिए एक ज़रूरी शर्त यह है कि आपके पास ऐसा मॉड्यूल 1 App Engine ऐप्लिकेशन हो जो काम कर रहा हो: मॉड्यूल 1 कोडलैब (सुझाया गया) को पूरा करें या रेपो से मॉड्यूल 1 ऐप्लिकेशन को कॉपी करें. आप अपना या हमारा, दोनों में से किसी का भी इस्तेमाल करें, मॉड्यूल 1 कोड पर हम "शुरू" करेंगे. कोडलैब से आपको हर चरण पर जानकारी मिलेगी. इससे आपको एक कोड मिलेगा, जो मॉड्यूल 7 रेपो फ़ोल्डर "FINISH" में मौजूद कोड से मिलता-जुलता होगा.

आप चाहे जो भी मॉड्यूल 1 ऐप्लिकेशन इस्तेमाल करें, फ़ोल्डर यहां दिए गए फ़ोल्डर की तरह दिखना चाहिए. इसके अलावा, यह lib फ़ोल्डर के साथ भी दिख सकता है:

$ ls
README.md               main.py                 templates
app.yaml                requirements.txt

3. (फिर से) बेसलाइन ऐप्लिकेशन डिप्लॉय करें

मॉड्यूल 1 ऐप्लिकेशन को फिर से डिप्लॉय करने के लिए, यह तरीका अपनाएं:

  1. अगर lib फ़ोल्डर मौजूद है, तो उसे मिटाएं और lib को फिर से पॉप्युलेट करने के लिए, pip install -t lib -r requirements.txt को चलाएं. अगर आपने Python 2 और 3 दोनों इंस्टॉल किए हैं, तो आपको इसके बजाय pip2 कमांड का इस्तेमाल करना पड़ सकता है.
  2. पक्का करें कि आपने gcloud कमांड-लाइन टूल इंस्टॉल किया हो और उसे शुरू किया हो. साथ ही, इसके इस्तेमाल की समीक्षा की हो.
  3. अगर आपको हर gcloud निर्देश के साथ अपना PROJECT_ID डालना नहीं है, तो अपने क्लाउड प्रोजेक्ट को gcloud config set project PROJECT_ID के साथ सेट करें.
  4. gcloud app deploy के साथ सैंपल ऐप्लिकेशन डिप्लॉय करें
  5. पुष्टि करें कि मॉड्यूल 1 ऐप्लिकेशन उम्मीद के मुताबिक काम करता है. हालांकि, हाल ही में हुई विज़िट की जानकारी नहीं दी गई है. इसकी जानकारी नीचे दी गई है

a7a9d2b80d706a2b.png

4. कॉन्फ़िगरेशन अपडेट करें

मानक App Engine कॉन्फ़िगरेशन फ़ाइलों (app.yaml, requirements.txt, appengine_config.py) में किसी बदलाव की ज़रूरत नहीं है.

5. ऐप्लिकेशन फ़ाइलों में बदलाव करें

ऐप्लिकेशन की मुख्य फ़ाइल main.py है और इस सेक्शन में किए गए सभी अपडेट, उसी फ़ाइल से जुड़े हैं. वेब टेंप्लेट, templates/index.html में भी एक छोटा अपडेट किया गया है. इस सेक्शन में ये बदलाव लागू किए जाने हैं:

  1. इंपोर्ट अपडेट करें
  2. पुश टास्क जोड़ें
  3. टास्क हैंडलर जोड़ें
  4. वेब टेंप्लेट अपडेट करें

1. इंपोर्ट अपडेट करें

google.appengine.api.taskqueue को इंपोर्ट करने से, टास्क की सूची की सुविधा मिलती है. Python के कुछ स्टैंडर्ड लाइब्रेरी पैकेज भी ज़रूरी हैं:

  • हम पुरानी विज़िट की जानकारी मिटाने के लिए एक टास्क जोड़ रहे हैं. इसलिए, ऐप्लिकेशन को टाइमस्टैंप इस्तेमाल करने होंगे. इसका मतलब है कि time और datetime का इस्तेमाल किया जाएगा.
  • टास्क को एक्ज़ीक्यूट करने से जुड़ी ज़रूरी जानकारी लॉग करने के लिए, हमें logging की ज़रूरत है.

इन सभी इंपोर्ट को जोड़ने के बाद, नीचे बताया गया है कि इन बदलावों से पहले और बाद में आपका कोड कैसा दिखता है:

पहले:

from flask import Flask, render_template, request
from google.appengine.ext import ndb

बाद में:

from datetime import datetime
import logging
import time
from flask import Flask, render_template, request
from google.appengine.api import taskqueue
from google.appengine.ext import ndb

2. पुश टास्क जोड़ें (टास्क के लिए डेटा को छोटा करें, नया टास्क सूची में जोड़ें)

पुश क्यू के दस्तावेज़ में बताया गया है: "किसी टास्क को प्रोसेस करने के लिए, आपको उसे पुश क्यू में जोड़ना होगा. App Engine, default नाम की एक डिफ़ॉल्ट पुश क्यू उपलब्ध कराता है. यह कॉन्फ़िगर की गई होती है और डिफ़ॉल्ट सेटिंग के साथ इस्तेमाल किए जाने के लिए तैयार होती है. अगर आप चाहें, तो अपने सभी टास्क को डिफ़ॉल्ट सूची में जोड़ लें. इसके लिए, आपको दूसरी सूचियां बनाने और कॉन्फ़िगर करने की ज़रूरत नहीं पड़ेगी." यह कोडलैब, कम शब्दों में जानकारी देने के लिए default सूची का इस्तेमाल करता है. एक जैसी या अलग-अलग विशेषताओं वाले अपने पुश क्यू तय करने के बारे में ज़्यादा जानने के लिए, पुश लिस्ट बनाने का दस्तावेज़ देखें.

इस कोडलैब का मुख्य लक्ष्य एक टास्क (default पुश क्यू में) जोड़ना है, जिसका काम डेटास्टोर से उन पुरानी विज़िट को मिटाना है जो अब नहीं दिख रही हैं. बेसलाइन ऐप्लिकेशन, एक नई Visit इकाई बनाकर हर विज़िट (/ के लिए GET अनुरोध) को रजिस्टर करता है. इसके बाद, सबसे हाल की विज़िट को फ़ेच और दिखाता है. सबसे पुरानी विज़िट में से कोई भी विज़िट कभी दिखाई या इस्तेमाल नहीं की जाएगी, इसलिए पुश टास्क दिखाई गई सबसे पुरानी विज़िट से पुरानी सभी विज़िट मिटा देता है. ऐसा करने के लिए, ऐप्लिकेशन को कुछ बदलने की ज़रूरत है:

  1. सबसे हाल की विज़िट के बारे में क्वेरी करते समय, उन विज़िट को तुरंत लौटाने के बजाय, ऐप्लिकेशन में बदलाव करके आखिरी Visit का टाइमस्टैंप सेव करें—जो कि सबसे पुराना है—इससे पहले की सभी विज़िट को मिटाना सुरक्षित है.
  2. इस टाइमस्टैंप के पेलोड के तौर पर पुश टास्क बनाएं और इसे टास्क हैंडलर पर भेजें. इसे एचटीटीपी POST से /trim तक ऐक्सेस किया जा सकता है. खास तौर पर, Datastore के टाइमस्टैंप को बदलने और उसे (फ़्लोट के तौर पर) टास्क में भेजने के लिए, स्टैंडर्ड Python उपयोगिताओं का इस्तेमाल करें. साथ ही, इसे (स्ट्रिंग के तौर पर) लॉग करें और उपयोगकर्ता को दिखाने के लिए उस स्ट्रिंग को सेटिनल वैल्यू के तौर पर भेजें.

ये सारी गतिविधियां fetch_visits() में होती हैं. ये अपडेट करने से पहले और बाद में ऐसा दिखेगा:

पहले:

def fetch_visits(limit):
    return (v.to_dict() for v in Visit.query().order(
            -Visit.timestamp).fetch(limit))

बाद में:

def fetch_visits(limit):
    'get most recent visits and add task to delete older visits'
    data = Visit.query().order(-Visit.timestamp).fetch(limit)
    oldest = time.mktime(data[-1].timestamp.timetuple())
    oldest_str = time.ctime(oldest)
    logging.info('Delete entities older than %s' % oldest_str)
    taskqueue.add(url='/trim', params={'oldest': oldest})
    return (v.to_dict() for v in data), oldest_str

3. टास्क हैंडलर जोड़ें (टास्क चलने पर कोड कॉल किया जाता है)

हालांकि, fetch_visits() में पुरानी विज़िट को आसानी से मिटाया जा सकता था, लेकिन ध्यान रखें कि असली उपयोगकर्ता से इस फ़ंक्शन का ज़्यादा कोई लेना-देना नहीं है. यह ऐप्लिकेशन के सहायक फ़ंक्शन हैं. साथ ही, यह स्टैंडर्ड ऐप्लिकेशन अनुरोधों के अलावा, एसिंक्रोनस तरीके से प्रोसेस करने का एक अच्छा तरीका है. असली उपयोगकर्ता को ज़्यादा तेज़ क्वेरी का फ़ायदा मिलेगा, क्योंकि Datastore में कम जानकारी होगी. एक नया फ़ंक्शन trim() बनाएं, जिसे टास्क सूची के ज़रिए POST अनुरोध के ज़रिए /trim को कॉल किया जाता है. यह फ़ंक्शन ये काम करता है:

  1. "सबसे पुरानी विज़िट" की जानकारी एक्सट्रैक्ट करता है टाइमस्टैंप पेलोड
  2. उस टाइमस्टैंप से पुरानी सभी इकाइयों को ढूंढने के लिए, Datastore क्वेरी जारी करता है.
  3. "सिर्फ़-बटनों के लिए" पहले से तेज़ विकल्प चुन लेता है क्योंकि उपयोगकर्ता के किसी वास्तविक डेटा की ज़रूरत नहीं है.
  4. हटाई जाने वाली इकाइयों की संख्या लॉग करता है (शून्य सहित).
  5. किसी भी इकाई को मिटाने के लिए, ndb.delete_multi() को कॉल करेगा (अगर नहीं, तो स्किप कर दिया जाएगा).
  6. एक खाली स्ट्रिंग देता है (इंप्लिसिट एचटीटीपी 200 रिटर्न कोड के साथ).

आपको ये सभी जानकारी नीचे trim() में दिखेंगी. fetch_visits() के ठीक बाद इसे main.py में जोड़ें:

@app.route('/trim', methods=['POST'])
def trim():
    '(push) task queue handler to delete oldest visits'
    oldest = request.form.get('oldest', type=float)
    keys = Visit.query(
            Visit.timestamp < datetime.fromtimestamp(oldest)
    ).fetch(keys_only=True)
    nkeys = len(keys)
    if nkeys:
        logging.info('Deleting %d entities: %s' % (
                nkeys, ', '.join(str(k.id()) for k in keys)))
        ndb.delete_multi(keys)
    else:
        logging.info('No entities older than: %s' % time.ctime(oldest))
    return ''   # need to return SOME string w/200

4. वेब टेंप्लेट अपडेट करें

अगर वैरिएबल मौजूद है, तो सबसे पुराना टाइमस्टैंप दिखाने के लिए इस Jinja2 कंडिशनल के साथ वेब टेंप्लेट templates/index.html को अपडेट करें:

{% if oldest is defined %}
    <b>Deleting visits older than:</b> {{ oldest }}</p>
{% endif %}

इस स्निपेट को प्रदर्शित विज़िट सूची के बाद लेकिन मुख्य भाग को बंद करने से पहले जोड़ें, ताकि आपका टेम्प्लेट कुछ ऐसा दिखे:

<!doctype html>
<html>
<head>
<title>VisitMe Example</title>
<body>

<h1>VisitMe example</h1>
<h3>Last 10 visits</h3>
<ul>
{% for visit in visits %}
    <li>{{ visit.timestamp.ctime() }} from {{ visit.visitor }}</li>
{% endfor %}
</ul>

{% if oldest is defined %}
    <b>Deleting visits older than:</b> {{ oldest }}</p>
{% endif %}
</body>
</html>

6. खास जानकारी/क्लीनअप

यह सेक्शन, कोडलैब के इस मॉड्यूल को रैप करके पूरा करता है. इसके लिए, ऐप्लिकेशन को डिप्लॉय किया जाता है. साथ ही, यह पुष्टि की जाती है कि यह सही तरीके से और किसी भी नतीजे पर दिखने वाले आउटपुट के हिसाब से काम करता है या नहीं. ऐप्लिकेशन की पुष्टि करने के बाद, सभी क्लीनअप करें और आगे की कार्रवाई करें.

ऐप्लिकेशन डिप्लॉय करें और उसकी पुष्टि करें

gcloud app deploy के साथ ऐप्लिकेशन को डिप्लॉय करें. आउटपुट, मॉड्यूल 1 ऐप्लिकेशन के जैसा होना चाहिए. हालांकि, सबसे नीचे एक नई लाइन होनी चाहिए, जो यह दिखाती है कि किन विज़िट को मिटाया जाएगा:

4aa8a2cb5f527079.png

कोडलैब पूरा करने के लिए बधाई. अब आपका कोड, मॉड्यूल 7 रेपो फ़ोल्डर में मौजूद कोड से मेल खाना चाहिए. अब यह मॉड्यूल 8 में Cloud Tasks में माइग्रेट के लिए तैयार है.

व्यवस्थित करें

सामान्य

अगर आपका काम अभी हो गया है, तो हमारा सुझाव है कि आप बिलिंग से बचने के लिए अपना App Engine ऐप्लिकेशन बंद कर दें. हालांकि, अगर आपको कुछ और टेस्ट या एक्सपेरिमेंट करना है, तो App Engine प्लैटफ़ॉर्म का एक मुफ़्त कोटा है. अगर इस्तेमाल के टीयर को पार नहीं किया जा रहा है, तो आपसे शुल्क नहीं लिया जाएगा. यह कंप्यूट के लिए है. हालांकि, काम के App Engine की सेवाओं के लिए भी शुल्क लिया जा सकता है. इसलिए, ज़्यादा जानकारी के लिए इसका कीमत पेज देखें. अगर इस माइग्रेशन में क्लाउड की अन्य सेवाएं शामिल हैं, तो उनका बिल अलग से भेजा जाता है. दोनों ही मामलों में, अगर लागू हो, तो "इस कोडलैब के लिए खास" सेक्शन देखें सेक्शन देखें.

अगर आपको पूरी जानकारी देनी है, तो App Engine जैसे Google Cloud के बिना सर्वर वाले कंप्यूट प्लैटफ़ॉर्म पर डिप्लॉय करने पर, मामूली बनाने और स्टोरेज का खर्च उठाना पड़ता है. Cloud Storage की तरह Cloud Build का अपना अलग कोटा होता है. उस इमेज का स्टोरेज, उसके कुछ हिस्से का इस्तेमाल करता है. हालांकि, हो सकता है कि आप किसी ऐसे क्षेत्र में हों जहां ऐसा कोई फ़्री टीयर उपलब्ध न हो. इसलिए, संभावित लागत को कम करने के लिए, अपने स्टोरेज के इस्तेमाल को ध्यान में रखें. Cloud Storage के लिए तय किए गए "फ़ोल्डर" तो आपको इन चीज़ों की समीक्षा करनी चाहिए:

  • console.cloud.google.com/storage/browser/LOC.artifacts.PROJECT_ID.appspot.com/containers/images
  • console.cloud.google.com/storage/browser/staging.PROJECT_ID.appspot.com
  • ऊपर दिए गए स्टोरेज लिंक, आपके PROJECT_ID और *LOC*ेशन के हिसाब से होते हैं. जैसे, "us" अगर आपका ऐप्लिकेशन अमेरिका में होस्ट किया जाता है.

दूसरी ओर, अगर आपको इस ऐप्लिकेशन या इससे जुड़े दूसरे माइग्रेशन कोडलैब का इस्तेमाल नहीं करना है और सब कुछ पूरी तरह से मिटाना है, तो अपना प्रोजेक्ट बंद कर दें.

इस कोडलैब के लिए खास

नीचे दी गई सेवाएं, इस कोडलैब के लिए यूनीक हैं. ज़्यादा जानकारी के लिए हर प्रॉडक्ट के दस्तावेज़ देखें:

अगले चरण

इस "माइग्रेशन" में, आपने मॉड्यूल 1 नमूना ऐप्लिकेशन में टास्क सूची पुश सूची उपयोग जोड़ा है, जिससे विज़िटर को ट्रैक करने के लिए समर्थन जोड़ा गया है, जिससे मॉड्यूल 7 नमूना ऐप्लिकेशन बन गया है. अगला माइग्रेशन आपको बताता है कि App Engine पुश टास्क से Cloud Tasks में अपग्रेड कैसे किया जाए. Python 3 पर अपग्रेड करते समय, उपयोगकर्ताओं को 2021 के आखिर से, Cloud Tasks पर माइग्रेट करने की ज़रूरत नहीं पड़ेगी. अगले सेक्शन में इसके बारे में ज़्यादा पढ़ें.

अगर आपको Cloud Tasks पर जाना है, तो इसके बाद मॉड्यूल 8 कोडलैब होगा. इसके अलावा, अतिरिक्त माइग्रेशन पर विचार करना ज़रूरी है. जैसे, Cloud Datastore, Cloud Memorystore, Cloud Storage या Cloud Pub/Sub (सूची बनाने वाली सूची). Cloud Run और Cloud Functions के लिए, क्रॉस-प्रॉडक्ट माइग्रेशन भी उपलब्ध हैं. सर्वरलेस माइग्रेशन स्टेशन का कॉन्टेंट (कोडलैब, वीडियो, सोर्स कोड [जब उपलब्ध हो]) इसके ओपन सोर्स रेपो से ऐक्सेस किया जा सकता है.

7. Python 3 पर माइग्रेशन

साल 2021 के आखिर में, App Engine की टीम ने दूसरी जनरेशन के रनटाइम में कई सेवाओं के साथ काम करने की सुविधा बढ़ाई. पहले यह सुविधा सिर्फ़ पहली जनरेशन के रनटाइम में उपलब्ध थी. इसका मतलब है कि अब आपको ऐप्लिकेशन इंजन टास्क की सूची जैसी बंडल की गई सेवाओं से स्टैंडअलोन क्लाउड या तीसरे पक्ष की मिलती-जुलती सेवाओं, जैसे कि Cloud Tasks पर माइग्रेट करने की ज़रूरत नहीं पड़ेगी. जैसे, Python 3 में ऐप्लिकेशन पोर्ट करना. दूसरे शब्दों में कहें, तो Python 3 App Engine ऐप्लिकेशन में टास्क सूची का इस्तेमाल तब तक किया जा सकता है, जब तक कि अगली-पीढ़ी की टेक्नोलॉजी के रनटाइम से बंडल की गई सेवाओं को ऐक्सेस करने के लिए, कोड में फिर से बदलाव किया जाता है.

मॉड्यूल 17 कोडलैब और इससे जुड़े वीडियो में, बंडल की गई सेवाओं के इस्तेमाल को Python 3 पर माइग्रेट करने के तरीके के बारे में ज़्यादा जानें. यह विषय मॉड्यूल 7 के दायरे में नहीं आता. हालांकि, यहां लिंक किए गए मॉड्यूल 1 और 7 ऐप्लिकेशन, दोनों के Python 3 वर्शन दिए गए हैं. ये वर्शन Python 3 में पोर्ट किए गए हैं और इनमें App Engine NDB और Task सूची का इस्तेमाल होता है.

8. अन्य संसाधन

डेवलपर के लिए, इस या इससे जुड़े माइग्रेशन मॉड्यूल के साथ-साथ इससे जुड़े अन्य प्रॉडक्ट को एक्सप्लोर करने के लिए, यहां कुछ अतिरिक्त संसाधन दिए गए हैं. इसमें ऐसी जगहें शामिल हैं जहां इस कॉन्टेंट पर सुझाव, शिकायत या राय दी जा सकती है. साथ ही, कोड के लिंक और दस्तावेज़ के ऐसे अलग-अलग हिस्से शामिल हैं जो आपके काम आ सकते हैं.

कोडलैब (कोड बनाना सीखना) से जुड़ी समस्याएं/सुझाव/राय/शिकायत

अगर आपको इस कोडलैब के साथ कोई समस्या मिलती है, तो कृपया आवेदन करने से पहले अपनी समस्या का पता लगाएं. खोजने और नई समस्याएं बनाने के लिए लिंक:

माइग्रेशन के लिए संसाधन

यहां दी गई टेबल में, मॉड्यूल 2 (START) और मॉड्यूल 7 (FINISH) के रेपो फ़ोल्डर के लिंक दिए गए हैं.

Codelab

Python 2

Python 3

मॉड्यूल 1

कोड

कोड (इस ट्यूटोरियल में नहीं दिया गया है)

मॉड्यूल 7 (यह कोडलैब)

कोड

कोड (इस ट्यूटोरियल में नहीं दिया गया है)

ऑनलाइन संसाधन

नीचे कुछ ऑनलाइन संसाधन दिए गए हैं, जो इस ट्यूटोरियल के लिए काम के हो सकते हैं:

App Engine टास्क सूची

App Engine प्लैटफ़ॉर्म

क्लाउड से जुड़ी अन्य जानकारी

वीडियो

लाइसेंस

इस काम को क्रिएटिव कॉमंस एट्रिब्यूशन 2.0 जेनरिक लाइसेंस के तहत लाइसेंस मिला है.