2015-11-07 155 views
0

我正在开发一个使用gae和python的matchmaking系统。我找到了一个自动匹配系统,我找到了任务队列。我实现了一个cron作业,每10分钟运行一次以添加一个队列。然而,我发现了以下错误: (SessionID的只是一个DB模式) queue_generator.pyGoogle App Engine任务队列错误

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) 

为什么这个错误发生的历史:

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 

我已经是该代码?

编辑

的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" 
+0

请显示您的app.yaml。 –

+0

@丹尼罗斯曼补充说。 – Dashadower

回答

1

对于除“/ queue_generator”以外的每个路径,您已正确引用了app对象,但对于该路径,您需要直接引用该模块,您需要以完全相同的方式对其进行定义:

- url: /queue_generator 
    script: queue_generator.app 
    login: admin 

另请注意,无法访问“/ matchcreator”:“/ queue_generator”是唯一将被路由到该文件的URL。您还需要在app.yaml中公开“/ matchcreator”,或者执行更常见的操作,即将所有路径路由到导入所有处理程序并定义特定路由的主应用程序。

+0

谢谢!我如何在app.yaml中公开/ matchcreator,所以如果我去url http:///...appspot.com/matchcreator那么它会显示matchcreator类? – Dashadower

+0

与您公开所有其他路径的方式相同。 –

0

这个错误发生,因为你调用一个模块,而不是一类..调用应该是:Module.Class.Method()