如何让后端实际执行任何操作-GAE Python

如何让后端实际执行任何操作-GAE Python,python,google-app-engine,backend,task-queue,Python,Google App Engine,Backend,Task Queue,我正试图在Google Appengine中获得一个后端来运行taskqueue中的任务。它运行时没有错误,但不执行任务。我发现文档非常混乱 我的cron.yaml: - description: backend test url: /send_to_backend schedule: every 2 minutes 我的app.yaml: - url: /send_to_backend script: test.app login: admin 我的后端.yaml: - n

我正试图在Google Appengine中获得一个后端来运行taskqueue中的任务。它运行时没有错误,但不执行任务。我发现文档非常混乱

我的cron.yaml:

- description: backend test
  url: /send_to_backend
  schedule: every 2 minutes
我的app.yaml:

- url: /send_to_backend
  script: test.app
  login: admin
我的后端.yaml:

- name: backendtest
  class: B1
My queue.yaml:

total_storage_limit: 500M
queue:
    - name: test
      rate: 1/s
      max_concurrent_requests: 1
main.py中的我的处理程序:

class BackendHandler(webapp2.RequestHandler):
    def get(self):
    taskqueue.add(url='/test', target='backendtest')

class TestHandler(webapp2.RequestHandler):
    def get(self):
        test.test()
在test.py中执行实际工作的函数:

def test():
    company = Company()
    company.name = "Advanced Micro Devices, Inc"
    company.exchange = "NASDAQ"
    company.put()

AMD从未进入db,我也不知所措。我这样做对吗?后端和任务队列是这样组合的吗?

是的,后端和任务队列是这样组合的

不幸的是,您并没有发布完全可运行的示例,所以很难说您需要多少修复。您肯定需要的一个修复方法是在TestHandler中更改get->post(队列任务处理由post完成)

下面是您的示例的完全可运行和工作版本。请不要忘记“”,因此请在开发环境中使用curl进行尝试:

app.yaml

application: stackoverflow-21225722
version: 1
runtime: python27
api_version: 1
threadsafe: true

handlers:

- url: /.*
  script: main.app
  login: admin
backends.yaml

backends:
- name: backendtest
  class: B1
克朗·亚姆

- description: backend test
  url: /send_to_backend
  schedule: every 2 minutes
main.py

from google.appengine.api import taskqueue
import test
import webapp2

class BackendHandler(webapp2.RequestHandler):
    def get(self):
      taskqueue.add(url='/test', target='backendtest')

class TestHandler(webapp2.RequestHandler):
    def post(self):
       test.test()

app = webapp2.WSGIApplication([
    ('/send_to_backend', BackendHandler),
    ('/test', TestHandler)
], debug=True)
queue.yaml

total_storage_limit: 500M
queue:
    - name: test
      rate: 1/s
      max_concurrent_requests: 1
test.py

from google.appengine.ext import ndb

class Company(ndb.Model):
    name = ndb.StringProperty()
    exchange = ndb.StringProperty()

def test():
    company = Company()
    company.name = "Advanced Micro Devices, Inc"
    company.exchange = "NASDAQ"
    company.put()

您可以尝试在test()方法中添加一些日志吗?这可能会有帮助您是否启用了计费功能?根据我从运行备份的文档中了解到的情况,必须启用计费。是的,计费已启用。@alinoz否,不需要像您建议的那样在TestHandler中将get()更改为post()。我还将TestHandler中的url='/test'更改为url='/_ah/start',并添加了选项:dynamic to backends.yaml,就像上面链接中吉米·凯恩建议的那样。这就成功了。但仍然不太确定如何使其与常驻后端一起工作;)更正:在没有Jimmy Kane的动态功能的情况下,它也能正常工作,只需几秒钟,db条目就会显示出来。