如何让后端实际执行任何操作-GAE Python
我正试图在Google Appengine中获得一个后端来运行taskqueue中的任务。它运行时没有错误,但不执行任务。我发现文档非常混乱 我的cron.yaml:如何让后端实际执行任何操作-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
- 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条目就会显示出来。