在 Python 3.7 中启动和停止处理程序

问题描述 投票:0回答:1

用 Python 2.7 编写的应用程序引擎应用程序在 app.yaml 中具有以下结构:

handlers:
    - url: /_ah/push-handlers/.*
      script: main.app
      #login: admin
      secure: always
    
    - url: /_ah/start
      script: start.app
    
    - url: /_ah/stop
      script: stop.app

start.py 和 stop.py 分别由 /-ah/start 和 /_ah/stop 处理,当 appengine 应用程序启动和停止以处理 pubsub 消息时,它们包含各自的方法。例如,start.py 包含以下代码:

app = webapp2.WSGIApplication([
    ('/_ah/start', ReceiveStart)
], debug=True)

这个类要处理包含默认的 get 方法:

class ReceiveStart(webapp2.RequestHandler):

    def get(self):
        last_end_time_str = ""
        try:
            # get the App Engine default bucket name to store a GCS file with last end_time
            project_id = app_identity.get_application_id()

现在,如果将此应用程序转换为 Python 3.7(尚未测试),app.yaml 将变为:

handlers:

    - url: /_ah/push-handlers/.*
      script: auto
      #login: admin
      secure: always
    
    - url: /_ah/start
      script: auto
    
    - url: /_ah/stop
      script: auto
      
    - url: /.*
      secure: always
      redirect_http_response_code: 301
      script: auto

当向此应用程序引擎发送和接收消息时,是否会像 Python 2.7 中那样发生这种重定向? start.app 和 stop.app 的 url 是否正确,因为脚本设置为 auto,而不是 start.app 和 stop.app 会起作用吗?

python-2.7 google-app-engine google-cloud-platform python-3.7
1个回答
2
投票

借助第二代 AppEngine,网络服务器不再依赖于平台,您可以使用所需的库来运行所需的框架。

在Python中,API通常使用Flask。 Django 更多用于网络应用程序。

无论如何,现在,您的处理程序不会将请求路由到特定脚本,而是将请求路由到必须处理该请求的网络服务器。

/_ah/start
/__ah/stop
的用法是相同的,但你必须在你的网络服务器中定义这些路由。这是烧瓶中的示例

from flask import Flask, request

app = Flask(__name__)

@app.route('/_ah/start')
def start():
    print("start called")
    return "",200

@app.route('/_ah/stop')
def stop():
    print("stop called")
    return "",200

© www.soinside.com 2019 - 2024. All rights reserved.