2011-01-23 2 views
1

J'ai implémenté une action de file d'attente de tâches pour un projet Flask + GAE avec lequel je joue afin d'en savoir plus sur le développement Web Python et l'erreur suivante, et je ne peux pas traquer toute information à ce sujet.Erreur de file d'attente de tâches Google App Engine à l'aide de l'API Python

---------------------------------------- 
Exception happened during processing of request from ('0.1.0.2', 80) 
Traceback (most recent call last): 
File "/usr/local/Cellar/python/2.7.1/lib/python2.7/SocketServer.py", line 284, in _handle_request_noblock 
self.process_request(request, client_address) 
File "/usr/local/Cellar/python/2.7.1/lib/python2.7/SocketServer.py", line 311, in process_request 
self.shutdown_request(request) 
File "/usr/local/Cellar/python/2.7.1/lib/python2.7/SocketServer.py", line 459, in shutdown_request 
request.shutdown(socket.SHUT_WR) 
AttributeError: 'FakeConnection' object has no attribute 'shutdown' 
---------------------------------------- 

J'ai une vue qui accepte une requête POST d'une autre vue dans ma demande, et pour autant que je peux dire qu'il fait tout le traitement que je me attends, sauf qu'il arrive à la fin et recrache ce en dehors. Je devine que cela parce que je vois cette sortie dans le journal devserver GAE:

INFO  2011-01-23 21:41:16,865 dev_appserver.py:3317] "GET /main/new HTTP/1.1" 200 - 
INFO  2011-01-23 21:41:23,753 dev_appserver.py:3317] "POST /main/new HTTP/1.1" 302 - 
INFO  2011-01-23 21:41:24,528 dev_appserver.py:3317] "POST /tasks/check_for_spam HTTP/1.1" 200 - 

Les trucs de check_for_spam est une fonction qui exécute certaines données via l'API Defensio pour déterminer si elle est un spam ou non. Voici le code

from google.appengine.api import taskqueue 
from google.appengine.ext import db 
from google.appengine.ext import webapp 
from google.appengine.ext.webapp.util import run_wsgi_app 

from application.models import LieModel 
from defensio import * 

class SpamChecker(webapp.RequestHandler): 
    def post(self): 
     id = self.request.get('id') 
     client = Defensio('577709b41d42f2c34f80cd57d50333d6') 
     q = LieModel.all() 
     q.filter("id = ", id) 
     results = q.fetch(1) 

     for result in results: 
      title_doc = {'content': result.title, 'type': 'comment', 'platform':'python'} 
      body_doc = {'content': result.body, 'type': 'comment', 'platform':'python'} 
      title_status,title_response = client.post_document(title_doc) 
      body_status,body_response = client.post_document(body_doc) 
      lie_is_spam = False 

      if title_status == 200 and title_response['defensio-result']['spaminess'] > 0.5: 
       lie_is_spam = True 

      if body_status == 200 and body_response['defensio-result']['spaminess'] > 0.5: 
       lie_is_spam = True 

      if lie_is_spam: 
       lie_k = db.Key.from_path('Lie', id) 
       lie = db.get(lie_k) 
       lie.delete() 


def main(): 
    run_wsgi_app(webapp.WSGIApplication([ 
     ('/tasks/check_for_spam', SpamChecker) 
     ])) 

if __name__ == '__main__': 
    main() 

Toute aide sur la résolution de ce problème serait grandement appréciée.

+1

Essayez d'utiliser Python 2.5. –

+0

Ouais, j'ai remarqué qu'il utilisait Python 2.7, alors comment dire à dev_appserver.py je veux donc utiliser (par exemple) python2.5 sur mon Macbook? – GrumpyCanuck

Répondre

3

Le problème est parti avec la suggestion de Robert Kluin. Je démarre le serveur de dev en utilisant

python2.5 /usr/local/bin/dev_appserver.py . 
Questions connexes