Google App Engine 任务队列错误
Google App Engine Task Queue error
我正在用 gae 和 python 开发一个婚介系统。我正在寻找一个一致的自动匹配系统,我找到了任务队列。我每 10 分钟执行一次 运行 的 cron 作业以添加队列。但是我收到以下错误:
When running /queue_generator:
Traceback (most recent call last):
File"/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 267, in Handle
result = handler(dict(self._environ), self._StartResponse)
TypeError: 'module' object is not callable
我的代码是:
(SessionID只是一个db模型)
queue_generator.py
import webapp2, time
from main import SessionID
from google.appengine.api import taskqueue
from google.appengine.ext import db
class Game(db.Model):
Users = db.ListProperty(str)
Score = db.IntegerProperty()
Turn = db.StringProperty()
class MainHandler(webapp2.RequestHandler):
def get(self):
taskqueue.add(url='/matchcreator',params={"id":str(time.time())})
class Gamegenerator(webapp2.RequestHandler):
def get(self):
while True:
q = Queue.get()
if len(q.queue) >= 4:
sids = []
for i in range(0,3):
sids.append(q.queue[i])
q.queue.remove(i)
q.put()
return self.response.set_status(204)
def post(self):
while True:
q = Queue.get()
if len(q.queue) >= 4:
sids = []
for i in range(0,3):
sids.append(q.queue[i])
q.queue.remove(i)
q.put()
return self.response.set_status(204)
app = webapp2.WSGIApplication([
('/queue_generator', MainHandler),
("/matchcreator",Gamegenerator)
], debug=True)
为什么会出现这个错误?
编辑
app.yaml
application: brobbinsgame
version: 1
runtime: python27
api_version: 1
threadsafe: yes
handlers:
- url: /favicon\.ico
static_files: favicon.ico
upload: favicon\.ico
- url: /css
static_dir: css
- url: /home.css
static_files: style.css
upload: style.css
application_readable: true
- url: /register
script: register.app
- url: /logout
script: logout.app
- url: /line
script: line.app
- url: /queue_generator
script: queue_generator
login: admin
- url: /home
script: home.app
- url: /resetsid
script: resetsid.app
login: admin
- url: .*
script: main.app
libraries:
- name: webapp2
version: "2.5.2"
- name: pycrypto
version: "latest"
发生此错误是因为您正在调用模块而不是 Class.. 调用应该是:Module.Class.Method()
对于除“/queue_generator 之外的每条路径,您都正确引用了 app
对象。但是对于那条路径,您直接引用了模块。您需要将其定义为完全相同的方式:
- url: /queue_generator
script: queue_generator.app
login: admin
另请注意,无法到达“/matchcreator”:“/queue_generator”是唯一将被路由到该文件的 URL。您还需要在 app.yaml 中公开“/matchcreator”,或者做更常见的事情,即将所有路径路由到一个主应用程序,该应用程序导入所有处理程序并在那里定义特定路由。
我正在用 gae 和 python 开发一个婚介系统。我正在寻找一个一致的自动匹配系统,我找到了任务队列。我每 10 分钟执行一次 运行 的 cron 作业以添加队列。但是我收到以下错误:
When running /queue_generator:
Traceback (most recent call last):
File"/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 267, in Handle
result = handler(dict(self._environ), self._StartResponse)
TypeError: 'module' object is not callable
我的代码是: (SessionID只是一个db模型) queue_generator.py
import webapp2, time
from main import SessionID
from google.appengine.api import taskqueue
from google.appengine.ext import db
class Game(db.Model):
Users = db.ListProperty(str)
Score = db.IntegerProperty()
Turn = db.StringProperty()
class MainHandler(webapp2.RequestHandler):
def get(self):
taskqueue.add(url='/matchcreator',params={"id":str(time.time())})
class Gamegenerator(webapp2.RequestHandler):
def get(self):
while True:
q = Queue.get()
if len(q.queue) >= 4:
sids = []
for i in range(0,3):
sids.append(q.queue[i])
q.queue.remove(i)
q.put()
return self.response.set_status(204)
def post(self):
while True:
q = Queue.get()
if len(q.queue) >= 4:
sids = []
for i in range(0,3):
sids.append(q.queue[i])
q.queue.remove(i)
q.put()
return self.response.set_status(204)
app = webapp2.WSGIApplication([
('/queue_generator', MainHandler),
("/matchcreator",Gamegenerator)
], debug=True)
为什么会出现这个错误?
编辑
app.yaml
application: brobbinsgame
version: 1
runtime: python27
api_version: 1
threadsafe: yes
handlers:
- url: /favicon\.ico
static_files: favicon.ico
upload: favicon\.ico
- url: /css
static_dir: css
- url: /home.css
static_files: style.css
upload: style.css
application_readable: true
- url: /register
script: register.app
- url: /logout
script: logout.app
- url: /line
script: line.app
- url: /queue_generator
script: queue_generator
login: admin
- url: /home
script: home.app
- url: /resetsid
script: resetsid.app
login: admin
- url: .*
script: main.app
libraries:
- name: webapp2
version: "2.5.2"
- name: pycrypto
version: "latest"
发生此错误是因为您正在调用模块而不是 Class.. 调用应该是:Module.Class.Method()
对于除“/queue_generator 之外的每条路径,您都正确引用了 app
对象。但是对于那条路径,您直接引用了模块。您需要将其定义为完全相同的方式:
- url: /queue_generator
script: queue_generator.app
login: admin
另请注意,无法到达“/matchcreator”:“/queue_generator”是唯一将被路由到该文件的 URL。您还需要在 app.yaml 中公开“/matchcreator”,或者做更常见的事情,即将所有路径路由到一个主应用程序,该应用程序导入所有处理程序并在那里定义特定路由。