Cách sử dụng Hàng đợi tác vụ của App Engine (kéo công việc) trong ứng dụng Flask (Mô-đun 18)

1. Tổng quan

Loạt lớp học lập trình về Trạm di chuyển không máy chủ (hướng dẫn thực hành theo tiến độ riêng) và video có liên quan nhằm giúp các nhà phát triển Google Cloud không máy chủ không hiện đại hoá các ứng dụng của họ bằng cách hướng dẫn họ thực hiện một hoặc nhiều quá trình di chuyển, chủ yếu là ngừng sử dụng các dịch vụ cũ. Việc này giúp ứng dụng của bạn dễ di chuyển hơn, đồng thời mang đến cho bạn nhiều lựa chọn và độ linh hoạt hơn, cho phép bạn tích hợp và truy cập vào nhiều sản phẩm của Cloud hơn, đồng thời dễ dàng nâng cấp lên bản phát hành ngôn ngữ mới hơn. Mặc dù ban đầu tập trung vào những người dùng Cloud sớm nhất, chủ yếu là các nhà phát triển App Engine (môi trường tiêu chuẩn), nhưng loạt bài này đủ rộng để bao gồm các nền tảng không máy chủ khác như Cloud FunctionsCloud Run hoặc ở những nơi khác nếu có.

Lớp học lập trình này hướng dẫn bạn cách đưa vào và sử dụng công việc lấy hàng đợi tác vụ của App Engine cho ứng dụng mẫu từ Lớp học lập trình Mô-đun 1. Chúng tôi sẽ bổ sung cách sử dụng tác vụ kéo trong hướng dẫn này của Mô-đun 18, sau đó di chuyển hoạt động sử dụng đó sang Cloud Pub/Sub ngay trong Mô-đun 19. Những người sử dụng Hàng đợi công việc cho các tác vụ đẩy sẽ chuyển sang Cloud Tasks và nên tham khảo Mô-đun 7-9.

Bạn sẽ tìm hiểu cách

  • Sử dụng API/dịch vụ theo gói/API hàng đợi tác vụ của App Engine
  • Thêm cách sử dụng hàng đợi kéo vào ứng dụng NDB cơ bản của Python 2 Flask App Engine

Bạn cần có

Khảo sát

Bạn sẽ sử dụng hướng dẫn này như thế nào?

Chỉ có thể đọc Đọc và hoàn thành bài tập

Bạn đánh giá thế nào về trải nghiệm sử dụng Python?

Người mới tập Trung cấp Thành thạo

Bạn đánh giá thế nào về trải nghiệm sử dụng các dịch vụ của Google Cloud?

Người mới tập Trung cấp Thành thạo

2. Thông tin khái quát

Để di chuyển khỏi các công việc kéo ra khỏi Hàng đợi công việc của App Engine, hãy thêm cách sử dụng của công việc đó vào ứng dụng NDB của Flask và App Engine hiện có từ Lớp học lập trình của Mô-đun 1. Ứng dụng mẫu cho thấy những lượt truy cập gần đây nhất của người dùng cuối. Điều đó thì tốt, nhưng việc theo dõi khách truy cập để xem ai truy cập nhiều nhất thậm chí còn thú vị hơn.

Mặc dù có thể sử dụng tác vụ đẩy cho số lượng khách truy cập này, nhưng chúng tôi muốn phân chia trách nhiệm giữa ứng dụng mẫu có nhiệm vụ đăng ký lượt truy cập và phản hồi ngay lập tức cho người dùng và một "nhân viên" được chỉ định có nhiệm vụ kiểm đếm số lượng khách truy cập nằm ngoài quy trình làm việc yêu cầu-phản hồi thông thường.

Để triển khai thiết kế này, chúng ta sẽ thêm tính năng sử dụng hàng đợi kéo vào ứng dụng chính cũng như hỗ trợ chức năng của trình thực thi. Worker này có thể chạy dưới dạng một quy trình riêng biệt (chẳng hạn như thực thể phụ trợ hoặc mã chạy trên máy ảo luôn hoạt động), công việc cron hoặc yêu cầu HTTP dòng lệnh cơ bản bằng curl hoặc wget. Sau quá trình tích hợp này, bạn có thể di chuyển ứng dụng sang Cloud Pub/Sub trong lớp học lập trình tiếp theo (Mô-đun 19).

Hướng dẫn này bao gồm các bước sau:

  1. Thiết lập/Chuẩn bị
  2. Cập nhật cấu hình
  3. Sửa đổi mã xử lý ứng dụng

3. Thiết lập/Chuẩn bị

Phần này giải thích cách:

  1. Thiết lập dự án trên Cloud
  2. Tải ứng dụng mẫu cơ sở
  3. (Triển khai lại) và xác thực ứng dụng cơ sở

Các bước này giúp đảm bảo bạn đang bắt đầu với đoạn mã đang hoạt động.

1. Thiết lập dự án

Nếu bạn đã hoàn thành Lớp học lập trình về Mô-đun 1, hãy sử dụng lại chính dự án (và đoạn mã) đó. Ngoài ra, hãy tạo một dự án hoàn toàn mới hoặc sử dụng lại một dự án hiện có khác. Hãy đảm bảo dự án này có một tài khoản thanh toán đang hoạt động và có một ứng dụng App Engine đã bật. Tìm mã dự án của bạn vì bạn sẽ cần sử dụng mã này nhiều lần trong lớp học lập trình này và sử dụng mã này bất cứ khi nào bạn gặp biến PROJECT_ID.

2. Tải ứng dụng mẫu cơ sở

Một trong những điều kiện tiên quyết của lớp học lập trình này là phải có ứng dụng App Engine của Mô-đun 1 hoạt động được. Hoàn thành Lớp học lập trình Mô-đun 1 (nên có) hoặc sao chép Ứng dụng Mô-đun 1 từ kho lưu trữ. Cho dù bạn sử dụng mã của bạn hay mã của chúng tôi, mã Mô-đun 1 là nơi chúng tôi sẽ "BẮT ĐẦU". Lớp học lập trình này sẽ hướng dẫn bạn qua từng bước, kết thúc bằng mã tương tự như những gì trong thư mục kho lưu trữ của Mô-đun 18 "Finish".

Bất kể bạn dùng ứng dụng Mô-đun 1 nào, thư mục đó sẽ có dạng như kết quả bên dưới, cũng có thể là thư mục lib:

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

3. (Triển khai lại) ứng dụng cơ sở

Thực thi các bước sau để triển khai ứng dụng Mô-đun 1:

  1. Xoá thư mục lib (nếu có) rồi chạy: pip install -t lib -r requirements.txt để điền lại lib. Thay vào đó, bạn có thể cần phải sử dụng lệnh pip2 nếu đã cài đặt cả Python 2 và 3.
  2. Hãy đảm bảo bạn đã cài đặtkhởi chạy công cụ dòng lệnh gcloud, đồng thời xem xét cách sử dụng công cụ này.
  3. Thiết lập dự án trên Cloud bằng gcloud config set project PROJECT_ID nếu bạn không muốn nhập PROJECT_ID cho mỗi lệnh gcloud được đưa ra.
  4. Triển khai ứng dụng mẫu bằng gcloud app deploy
  5. Xác nhận ứng dụng Mô-đun 1 chạy như dự kiến và hiển thị những lượt truy cập gần đây nhất (hình minh hoạ bên dưới)

a7a9d2b80d706a2b.png

4. Cập nhật cấu hình

Không cần thay đổi gì đối với các tệp cấu hình App Engine chuẩn (app.yaml, requirements.txt, appengine_config.py). Thay vào đó, hãy thêm tệp cấu hình mới queue.yaml với nội dung sau, đặt tệp này vào cùng một thư mục cấp cao nhất:

queue:
- name: pullq
  mode: pull

Tệp queue.yaml chỉ định tất cả hàng đợi công việc hiện có cho ứng dụng của bạn (ngoại trừ hàng đợi [push] default do App Engine tạo tự động). Trong trường hợp này, chỉ có một hàng đợi kéo có tên là pullq. App Engine yêu cầu chỉ định lệnh modepull, nếu không thì sẽ tạo một hàng đợi đẩy theo mặc định. Tìm hiểu thêm về cách tạo hàng đợi kéo trong tài liệu này. Ngoài ra, hãy xem trang tham khảo về queue.yaml để biết những cách khác.

Hãy triển khai tệp này một cách riêng biệt với ứng dụng của bạn. Bạn vẫn sẽ sử dụng gcloud app deploy nhưng đồng thời cung cấp queue.yaml trên dòng lệnh:

$ gcloud app deploy queue.yaml
Configurations to update:

descriptor:      [/tmp/mod18-gaepull/queue.yaml]
type:            [task queues]
target project:  [my-project]

WARNING: Caution: You are updating queue configuration. This will override any changes performed using 'gcloud tasks'. More details at
https://cloud.google.com/tasks/docs/queue-yaml

Do you want to continue (Y/n)?

Updating config [queue]...⠹WARNING: We are using the App Engine app location (us-central1) as the default location. Please use the "--location" flag if you want to use a different location.
Updating config [queue]...done.

Task queues have been updated.

Visit the Cloud Platform Console Task Queues page to view your queues and cron jobs.
$

5. Sửa đổi mã xử lý ứng dụng

Phần này mô tả nội dung cập nhật cho các tệp sau:

  • main.py – thêm việc sử dụng hàng đợi kéo vào ứng dụng chính
  • templates/index.html — cập nhật mẫu web để hiển thị dữ liệu mới

Nhập và hằng số

Bước đầu tiên là thêm một lệnh nhập mới và một vài hằng số để hỗ trợ hàng đợi kéo:

  • Thêm tệp nhập của thư viện Hàng đợi tác vụ, google.appengine.api.taskqueue.
  • Thêm 3 hằng số để hỗ trợ cho thuê số lượng tác vụ kéo tối đa (TASKS) trong một giờ (HOUR) qua hàng đợi kéo (QUEUE).
  • Thêm một hằng số để hiển thị số lượt truy cập gần đây nhất cũng như khách truy cập hàng đầu (LIMIT).

Dưới đây là mã gốc và giao diện sau khi thực hiện những cập nhật này:

TRƯỚC KHI:

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

app = Flask(__name__)

SAU KHI:

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

HOUR = 3600
LIMIT = 10
TASKS = 1000
QNAME = 'pullq'
QUEUE = taskqueue.Queue(QNAME)
app = Flask(__name__)

Thêm tác vụ kéo (thu thập dữ liệu cho tác vụ và tạo tác vụ trong hàng đợi kéo)

Mô hình dữ liệu Visit vẫn giữ nguyên, cũng như việc truy vấn lượt truy cập hiển thị trong fetch_visits(). Thay đổi duy nhất cần thiết trong phần mã này là trong store_visit(). Ngoài việc đăng ký lượt truy cập, hãy thêm một tác vụ vào hàng đợi kéo cùng với địa chỉ IP của khách truy cập để worker có thể tăng bộ đếm khách truy cập.

TRƯỚC KHI:

class Visit(ndb.Model):
    'Visit entity registers visitor IP address & timestamp'
    visitor   = ndb.StringProperty()
    timestamp = ndb.DateTimeProperty(auto_now_add=True)

def store_visit(remote_addr, user_agent):
    'create new Visit entity in Datastore'
    Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()

def fetch_visits(limit):
    'get most recent visits'
    return Visit.query().order(-Visit.timestamp).fetch(limit)

SAU KHI:

class Visit(ndb.Model):
    'Visit entity registers visitor IP address & timestamp'
    visitor   = ndb.StringProperty()
    timestamp = ndb.DateTimeProperty(auto_now_add=True)

def store_visit(remote_addr, user_agent):
    'create new Visit in Datastore and queue request to bump visitor count'
    Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()
    QUEUE.add(taskqueue.Task(payload=remote_addr, method='PULL'))

def fetch_visits(limit):
    'get most recent visits'
    return Visit.query().order(-Visit.timestamp).fetch(limit)

Tạo mô hình dữ liệu và hàm truy vấn để theo dõi khách truy cập

Thêm mô hình dữ liệu VisitorCount để theo dõi khách truy cập; nó phải có các trường cho chính visitor cũng như một số nguyên counter để theo dõi số lượt truy cập. Sau đó, hãy thêm một hàm mới (có thể là hàm classmethod Python) tên là fetch_counts() để truy vấn và trả về những khách truy cập hàng đầu theo thứ tự từ ít nhất đến ít nhất. Thêm lớp và hàm ngay bên dưới phần nội dung của fetch_visits():

class VisitorCount(ndb.Model):
    visitor = ndb.StringProperty(repeated=False, required=True)
    counter = ndb.IntegerProperty()

def fetch_counts(limit):
    'get top visitors'
    return VisitCount.query().order(-VisitCount.counter).fetch(limit)

Thêm mã worker

Thêm hàm mới log_visitors() để ghi nhật ký khách truy cập thông qua yêu cầu GET vào /log. Dịch vụ này sử dụng từ điển/băm để theo dõi số lượng khách truy cập gần đây nhất, cho thuê nhiều tác vụ nhất có thể trong một giờ. Đối với mỗi tác vụ, hệ thống sẽ đo lường tất cả lượt truy cập của cùng một khách truy cập. Với trong tay, ứng dụng sẽ cập nhật tất cả thực thể VisitorCount tương ứng đã có trong Datastore hoặc tạo thực thể mới nếu cần. Bước cuối cùng sẽ trả về một thông báo văn bản thuần tuý cho biết số lượng khách truy cập đã đăng ký từ số lượng công việc được xử lý. Thêm hàm này vào main.py ngay bên dưới fetch_counts():

@app.route('/log')
def log_visitors():
    'worker processes recent visitor counts and updates them in Datastore'
    # tally recent visitor counts from queue then delete those tasks
    tallies = {}
    tasks = QUEUE.lease_tasks(HOUR, TASKS)
    for task in tasks:
        visitor = task.payload
        tallies[visitor] = tallies.get(visitor, 0) + 1
    if tasks:
        QUEUE.delete_tasks(tasks)

    # increment those counts in Datastore and return
    for visitor in tallies:
        counter = VisitorCount.query(VisitorCount.visitor == visitor).get()
        if not counter:
            counter = VisitorCount(visitor=visitor, counter=0)
            counter.put()
        counter.counter += tallies[visitor]
        counter.put()
    return 'DONE (with %d task[s] logging %d visitor[s])\r\n' % (
            len(tasks), len(tallies))

Cập nhật trình xử lý chính bằng dữ liệu hiển thị mới

Để hiển thị những khách truy cập hàng đầu, hãy cập nhật trình xử lý chính root() để gọi fetch_counts(). Ngoài ra, mẫu này sẽ được cập nhật để hiển thị số lượng khách truy cập hàng đầu và số lượt truy cập gần đây nhất. Đóng gói số lượng khách truy cập cùng với các lượt truy cập gần đây nhất từ lệnh gọi đến fetch_visits() và thả dữ liệu đó vào một context duy nhất để chuyển vào mẫu web. Dưới đây là mã trước cũng như sau khi thay đổi này được thực hiện:

TRƯỚC KHI:

@app.route('/')
def root():
    'main application (GET) handler'
    store_visit(request.remote_addr, request.user_agent)
    visits = fetch_visits(10)
    return render_template('index.html', visits=visits)

SAU KHI:

@app.route('/')
def root():
    'main application (GET) handler'
    store_visit(request.remote_addr, request.user_agent)
    context = {
        'limit':  LIMIT,
        'visits': fetch_visits(LIMIT),
        'counts': fetch_counts(LIMIT),
    }
    return render_template('index.html', **context)

Đây là tất cả thay đổi bắt buộc của main.py và sau đây là hình ảnh minh hoạ các nội dung cập nhật đó để giúp bạn hiểu rộng hơn về những thay đổi mà bạn sẽ thực hiện đối với main.py:

ad5fd3345efc13d0.png

Cập nhật mẫu web bằng dữ liệu hiển thị mới

Mẫu web templates/index.html yêu cầu bản cập nhật để hiển thị những khách truy cập hàng đầu bên cạnh tải trọng thông thường của khách truy cập gần đây nhất. Thả những khách truy cập hàng đầu và số lượng của họ vào một bảng ở đầu trang và tiếp tục hiển thị các lượt truy cập gần đây nhất như trước đó. Thay đổi duy nhất khác là chỉ định số được hiển thị qua biến limit thay vì mã hoá cứng số đó. Dưới đây là những nội dung cập nhật mà bạn nên thực hiện cho mẫu web của mình:

TRƯỚC KHI:

<!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>

SAU KHI:

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

<h1>VisitMe example</h1>

<h3>Top {{ limit }} visitors</h3>
<table border=1 cellspacing=0 cellpadding=2>
    <tr><th>Visitor</th><th>Visits</th></tr>
{% for count in counts %}
    <tr><td>{{ count.visitor|e }}</td><td align="center">{{ count.counter }}</td></tr>
{% endfor %}
</table>

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

Điều này kết thúc những thay đổi cần thiết trong đó bổ sung việc sử dụng tính năng lấy hàng đợi tác vụ của App Engine vào ứng dụng mẫu Mô-đun 1. Thư mục của bạn hiện đại diện cho ứng dụng mẫu Mô-đun 18 và phải chứa các tệp sau:

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

6. Tóm tắt/Dọn dẹp

Phần này tóm tắt lớp học lập trình này bằng cách triển khai ứng dụng, xác minh rằng ứng dụng hoạt động như dự kiến và trong mọi đầu ra được phản ánh. Hãy chạy riêng worker để xử lý số lượng khách truy cập. Sau khi xác thực ứng dụng, hãy thực hiện mọi bước dọn dẹp và xem xét các bước tiếp theo.

Triển khai và xác minh ứng dụng

Hãy đảm bảo rằng bạn đã thiết lập hàng đợi kéo như chúng ta đã làm ở gần đầu lớp học lập trình này với gcloud app deploy queue.yaml. Nếu quá trình này hoàn tất và ứng dụng mẫu của bạn đã sẵn sàng hoạt động, hãy triển khai ứng dụng bằng gcloud app deploy. Kết quả phải giống với ứng dụng Mô-đun 1, ngoại trừ việc ứng dụng hiện có "khách truy cập hàng đầu" bảng ở trên cùng:

b667551dcbab1a09.png

Mặc dù giao diện người dùng web đã cập nhật hiển thị số khách truy cập hàng đầu và lượt truy cập gần đây nhất, nhưng hãy lưu ý rằng số lượt khách truy cập không bao gồm lượt truy cập này. Ứng dụng hiển thị số lượng khách truy cập trước đây trong khi xoá một công việc mới để làm tăng số lượng khách truy cập này trong hàng đợi kéo – một công việc đang chờ được xử lý.

Bạn có thể thực thi tác vụ này bằng cách gọi /log theo nhiều cách:

Ví dụ: nếu sử dụng curl để gửi yêu cầu GET đến /log, kết quả sẽ có dạng như sau, sau khi bạn cung cấp PROJECT_ID:

$ curl https://PROJECT_ID.appspot.com/log
DONE (with 1 task[s] logging 1 visitor[s])

Sau đó, số lượng đã cập nhật sẽ được phản ánh vào lần truy cập trang web tiếp theo. Vậy là xong!

Chúc mừng bạn đã hoàn thành lớp học lập trình này để thêm thành công việc sử dụng dịch vụ hàng đợi kéo hàng đợi tác vụ của App Engine vào ứng dụng mẫu. Giờ đây, bạn đã có thể di chuyển sang Cloud Pub/Sub, Cloud NDB và Python 3 trong Mô-đun 19.

Dọn dẹp

Giải pháp chung

Nếu bạn đã hoàn tất, chúng tôi khuyên bạn nên tắt ứng dụng App Engine để tránh phát sinh thanh toán. Tuy nhiên, nếu bạn muốn kiểm tra hoặc thử nghiệm thêm, nền tảng App Engine có hạn mức miễn phí, và bạn sẽ không bị tính phí, miễn là bạn không vượt quá cấp sử dụng đó. Đó là cho dịch vụ điện toán nhưng bạn cũng có thể bị tính phí cho các dịch vụ có liên quan của App Engine, vì vậy hãy xem trang giá của dịch vụ này để biết thêm thông tin. Nếu quá trình di chuyển này liên quan đến các dịch vụ khác trên Google Cloud, thì những dịch vụ đó sẽ được tính phí riêng. Trong cả hai trường hợp (nếu có), hãy xem phần "Dành riêng cho lớp học lập trình này" phần dưới đây.

Để công bố đầy đủ thông tin, việc triển khai cho một nền tảng điện toán không máy chủ của Google Cloud như App Engine sẽ làm phát sinh chi phí bản dựng và bộ nhớ thấp. Cloud Build cũng có hạn mức miễn phí riêng, tương tự như Cloud Storage. Việc lưu trữ hình ảnh đó sẽ sử dụng hết một phần hạn mức đó. Tuy nhiên, bạn có thể sống ở một khu vực không có bậc miễn phí như vậy, vì vậy hãy chú ý đến mức sử dụng bộ nhớ của bạn để giảm thiểu chi phí tiềm ẩn. "Thư mục" cụ thể trên Cloud Storage bạn nên xem xét, bao gồm:

  • 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
  • Các đường liên kết lưu trữ ở trên phụ thuộc vào PROJECT_ID và hoạt động *LOC*của bạn, ví dụ: "us" nếu ứng dụng của bạn được lưu trữ ở Hoa Kỳ.

Mặt khác, nếu bạn không định tiếp tục sử dụng ứng dụng này hoặc các lớp học lập trình di chuyển khác có liên quan và muốn xoá hoàn toàn mọi thứ, hãy ngừng dự án của bạn.

Dành riêng cho lớp học lập trình này

Các dịch vụ được liệt kê dưới đây là những dịch vụ dành riêng cho lớp học lập trình này. Hãy tham khảo tài liệu của từng sản phẩm để biết thêm thông tin:

Các bước tiếp theo

Trong quá trình "di chuyển" này, bạn đã thêm việc sử dụng hàng đợi đẩy hàng đợi tác vụ vào ứng dụng mẫu Mô-đun 1, bằng cách thêm tính năng hỗ trợ theo dõi khách truy cập, từ đó triển khai ứng dụng mẫu Mô-đun 18. Trong lần di chuyển tiếp theo, bạn sẽ nâng cấp các nhiệm vụ lấy dữ liệu từ App Engine lên Cloud Pub/Sub. Kể từ cuối năm 2021, người dùng không còn bắt buộc phải di chuyển sang Cloud Pub/Sub khi nâng cấp lên Python 3. Đọc thêm về điều này trong phần tiếp theo.

Để di chuyển sang Cloud Pub/Sub, hãy tham khảo lớp học lập trình của Mô-đun 19. Ngoài ra, bạn có thể cân nhắc các quá trình di chuyển khác, chẳng hạn như Cloud Datastore, Cloud Memorystore, Cloud Storage hoặc Cloud Tasks (hàng đợi đẩy). Ngoài ra, chúng tôi cũng sẽ di chuyển giữa nhiều sản phẩm sang Cloud Run và Cloud Functions. Bạn có thể truy cập tất cả nội dung của Trạm di chuyển không máy chủ (lớp học lập trình, video, mã nguồn [nếu có]) tại kho lưu trữ nguồn mở của nó.

7. Di chuyển sang Python 3

Mùa thu năm 2021, nhóm App Engine mở rộng khả năng hỗ trợ nhiều dịch vụ đi kèm cho môi trường thời gian chạy thế hệ 2 (có thời gian chạy thế hệ 1). Do đó, khi chuyển ứng dụng sang Python 3, bạn không cần phải di chuyển từ các dịch vụ đi kèm (như Danh sách nhiệm vụ của App Engine) sang các dịch vụ độc lập của bên thứ ba hoặc Cloud như Cloud Pub/Sub. Nói cách khác, bạn có thể tiếp tục sử dụng Hàng đợi tác vụ trong các ứng dụng App Engine Python 3 miễn là bạn điều chỉnh mã để truy cập các dịch vụ đi kèm từ thời gian chạy thế hệ tiếp theo.

Bạn có thể tìm hiểu thêm về cách di chuyển hoạt động sử dụng các dịch vụ theo gói sang Python 3 trong Lớp học lập trình về Mô-đun 17 và video tương ứng. Mặc dù chủ đề đó nằm ngoài phạm vi của Mô-đun 18, nhưng được liên kết bên dưới là các phiên bản Python 3 của ứng dụng Mô-đun 1 được chuyển sang Python 3 và vẫn sử dụng App Engine NDB. (Vào một thời điểm nào đó, phiên bản Python 3 của ứng dụng Mô-đun 18 cũng sẽ được cung cấp.)

8. Tài nguyên khác

Dưới đây là các tài nguyên bổ sung dành cho nhà phát triển đang tìm hiểu thêm về Phụ lục di chuyển này hoặc mô-đun di chuyển có liên quan cũng như các sản phẩm có liên quan. Trong đó có cả những nơi để đưa ra ý kiến phản hồi về nội dung này, các đường liên kết đến mã nguồn và nhiều thông tin hữu ích khác của tài liệu.

Vấn đề/ý kiến phản hồi về lớp học lập trình này

Nếu bạn gặp vấn đề với lớp học lập trình này, vui lòng tìm vấn đề của bạn trước khi gửi. Đường liên kết để tìm kiếm và báo cáo vấn đề mới:

Tài nguyên di chuyển

Bạn có thể tìm thấy các đường liên kết đến các thư mục repo cho Mô-đun 1 (START) và Mô-đun 18 (complete) trong bảng bên dưới. Bạn cũng có thể truy cập vào các kho lưu trữ này qua kho lưu trữ dành cho mọi quá trình di chuyển trong lớp học lập trình App Engine; sao chép tệp đó hoặc tải xuống một tệp ZIP.

Codelab

Python 2

Python 3

Học phần 1

(không có trong hướng dẫn này)

Mô-đun 18 (lớp học lập trình này)

Không có

Tài liệu tham khảo trực tuyến

Dưới đây là các tài nguyên có liên quan cho hướng dẫn này:

Hàng đợi tác vụ của App Engine

Nền tảng App Engine

Tài liệu về App Engine

Thời gian chạy của Python 2 App Engine (môi trường tiêu chuẩn)

Thời gian chạy của Python 3 App Engine (môi trường tiêu chuẩn)

Điểm khác biệt giữa Python 2 và 3 môi trường thời gian chạy của App Engine (môi trường tiêu chuẩn)

Hướng dẫn di chuyển từ Python 2 sang 3 App Engine (môi trường chuẩn)

Thông tin về giáhạn mức của App Engine

Ra mắt nền tảng App Engine thế hệ thứ hai (2018)

Hỗ trợ dài hạn cho môi trường thời gian chạy cũ

Mẫu di chuyển tài liệu

Thông tin khác về đám mây

Video

Giấy phép

Tác phẩm này được cấp phép theo Giấy phép chung Ghi nhận tác giả Creative Commons 2.0.